Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -3,6 +3,8 @@ package auto_delivery
|
|||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/defsch"
|
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/defsch"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
@@ -131,7 +133,7 @@ func AutoSettingFakeDelivery() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range orderList {
|
for _, order := range orderList {
|
||||||
if len(riderListInfo[riderKey]) == model.NO {
|
if len(riderListInfo[riderKey]) == model.NO {
|
||||||
// 骑手列表
|
// 骑手列表
|
||||||
configRiderList, err := dao.QueryConfigs(db, "riderList", "Sys", "")
|
configRiderList, err := dao.QueryConfigs(db, "riderList", "Sys", "")
|
||||||
@@ -152,17 +154,18 @@ func AutoSettingFakeDelivery() {
|
|||||||
if randTime >= int64(len(riderListInfo[riderKey])) {
|
if randTime >= int64(len(riderListInfo[riderKey])) {
|
||||||
randTime = int64(len(riderListInfo[riderKey])) - 1
|
randTime = int64(len(riderListInfo[riderKey])) - 1
|
||||||
}
|
}
|
||||||
if (v.PhoneAscription == "" || strings.Split(v.PhoneAscription, "-")[0] != model.PhoneAscriptionAddressYes) && v.VendorID == model.VendorIDDD {
|
if (order.PhoneAscription == "" || strings.Split(order.PhoneAscription, "-")[0] != model.PhoneAscriptionAddressYes) && order.VendorID == model.VendorIDDD {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// 自动拣货
|
// 自动拣货
|
||||||
if v.Status < model.OrderStatusFinishedPickup { // 未拣货
|
if order.Status < model.OrderStatusFinishedPickup { // 未拣货
|
||||||
handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID)
|
handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID)
|
||||||
flag := model.IsOrderDeliveryByStore(v) || model.IsOrderDeliveryBySelf(v)
|
flag := model.IsOrderDeliveryByStore(order) || model.IsOrderDeliveryBySelf(order)
|
||||||
if err := handler.PickupGoods(v, flag, jxcontext.AdminCtx.GetUserName()); err != nil {
|
if err := handler.PickupGoods(order, flag, jxcontext.AdminCtx.GetUserName()); err != nil {
|
||||||
globals.SugarLogger.Errorf("自动拣货错误:[%v]", err)
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusPickedUp, fmt.Sprintf("自动拣货错误:[%v]", err))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusPickedUp, "fake自动拣货,已拣货")
|
||||||
}
|
}
|
||||||
//自动发单
|
//自动发单
|
||||||
if len(riderListInfo[riderKey]) == 0 {
|
if len(riderListInfo[riderKey]) == 0 {
|
||||||
@@ -170,10 +173,11 @@ func AutoSettingFakeDelivery() {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
for riderName, riderPhone := range riderListInfo[riderKey][randTime] {
|
for riderName, riderPhone := range riderListInfo[riderKey][randTime] {
|
||||||
if err := defsch.FixedScheduler.SelfDeliveringAndUpdateStatus(jxcontext.AdminCtx, v.VendorOrderID, v.VendorID, jxcontext.AdminCtx.GetUserName(), riderName, riderPhone); err != nil {
|
if err := defsch.FixedScheduler.SelfDeliveringAndUpdateStatus(jxcontext.AdminCtx, order.VendorOrderID, order.VendorID, jxcontext.AdminCtx.GetUserName(), riderName, riderPhone); err != nil {
|
||||||
globals.SugarLogger.Errorf("自动发货错误:[%v]", err)
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusPickedUp, fmt.Sprintf("自动发货错误:[%v]", err))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusCallRider, "自动发货,出库")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -201,7 +201,8 @@ func (c *OrderManager) addAfsOrderStatus(db *dao.DaoDB, orderStatus *model.Order
|
|||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
}
|
}
|
||||||
isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db)
|
isDuplicated, err = addOrderOrWaybillStatus(orderStatus, db)
|
||||||
if err == nil && !isDuplicated && (orderStatus.Status != model.OrderStatusUnknown && orderStatus.Status != model.OrderStatusMsg) {
|
//if err == nil && !isDuplicated && (orderStatus.Status != model.OrderStatusUnknown && orderStatus.Status != model.OrderStatusMsg) {
|
||||||
|
if err == nil && (orderStatus.Status != model.OrderStatusUnknown && orderStatus.Status != model.OrderStatusMsg) {
|
||||||
order = &model.AfsOrder{
|
order = &model.AfsOrder{
|
||||||
AfsOrderID: orderStatus.VendorOrderID,
|
AfsOrderID: orderStatus.VendorOrderID,
|
||||||
VendorID: orderStatus.VendorID,
|
VendorID: orderStatus.VendorID,
|
||||||
@@ -234,6 +235,7 @@ func (c *OrderManager) addAfsOrderStatus(db *dao.DaoDB, orderStatus *model.Order
|
|||||||
updateFields = append(updateFields, "AfsTotalShopMoney")
|
updateFields = append(updateFields, "AfsTotalShopMoney")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.CallFuncLogError(func() error {
|
utils.CallFuncLogError(func() error {
|
||||||
_, err = dao.UpdateEntity(db, order, updateFields...)
|
_, err = dao.UpdateEntity(db, order, updateFields...)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package orderman
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -82,10 +84,12 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
|
|||||||
if dao.IsNoRowsError(err) {
|
if dao.IsNoRowsError(err) {
|
||||||
err = nil
|
err = nil
|
||||||
isNewComment = true
|
isNewComment = true
|
||||||
|
if orderComment.StoreID == 669247 {
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "2452A93EEB9111EC9B06525400E86DC0", "自动好评回复orderCommentList:", utils.Format4Output(orderCommentList[0], false))
|
||||||
|
}
|
||||||
if orderComment.IsReplied == 0 && time.Now().Sub(orderComment.CommentCreatedAt) < time.Duration(orderComment.ModifyDuration)*time.Hour {
|
if orderComment.IsReplied == 0 && time.Now().Sub(orderComment.CommentCreatedAt) < time.Duration(orderComment.ModifyDuration)*time.Hour {
|
||||||
if storeDetail, err2 := dao.GetStoreDetail(db, orderComment.StoreID, orderComment.VendorID, ""); err2 == nil {
|
if storeDetail, err2 := dao.GetStoreDetail(db, orderComment.StoreID, orderComment.VendorID, ""); err2 == nil {
|
||||||
if storeDetail.AutoReplyType == model.AutoReplyAll ||
|
if storeDetail.AutoReplyType == model.AutoReplyAll || orderComment.Score > JX_BAD_COMMENTS_MAX_LEVEL && storeDetail.AutoReplyType == model.AutoReplyGoodComment {
|
||||||
orderComment.Score > JX_BAD_COMMENTS_MAX_LEVEL && storeDetail.AutoReplyType == model.AutoReplyGoodComment {
|
|
||||||
c.replyOrderComment(storeDetail.VendorOrgCode, orderComment)
|
c.replyOrderComment(storeDetail.VendorOrgCode, orderComment)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,9 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven
|
|||||||
VendorOrgCode: order.VendorOrgCode,
|
VendorOrgCode: order.VendorOrgCode,
|
||||||
}
|
}
|
||||||
err = dao.CreateEntity(dao.GetDB(), bill)
|
err = dao.CreateEntity(dao.GetDB(), bill)
|
||||||
|
order.VendorWaybillID = order.VendorOrderID
|
||||||
|
order.WaybillVendorID = model.VendorJXFakeWL
|
||||||
|
dao.UpdateEntity(dao.GetDB(), order, "VendorWaybillID", "WaybillVendorID")
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -796,7 +796,6 @@ func GetVendorStore(ctx *jxcontext.Context, vendorID int, vendorOrgCode, vendorS
|
|||||||
if vendorID == model.VendorIDSFPS {
|
if vendorID == model.VendorIDSFPS {
|
||||||
flag := false
|
flag := false
|
||||||
if store, err := dao.GetStoreDetail(dao.GetDB(), utils.Str2Int(vendorStoreID), 0, ""); err == nil {
|
if store, err := dao.GetStoreDetail(dao.GetDB(), utils.Str2Int(vendorStoreID), 0, ""); err == nil {
|
||||||
globals.SugarLogger.Debugf("store.CityName=%s", store.CityName)
|
|
||||||
for k, _ := range sfps2.SFCityStoreIDs {
|
for k, _ := range sfps2.SFCityStoreIDs {
|
||||||
if strings.Contains(store.CityName, k) || store.CityName == k {
|
if strings.Contains(store.CityName, k) || store.CityName == k {
|
||||||
flag = true
|
flag = true
|
||||||
@@ -1802,7 +1801,6 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor
|
|||||||
DDFlag = true
|
DDFlag = true
|
||||||
} //特殊处理抖店运费模板、打包费
|
} //特殊处理抖店运费模板、打包费
|
||||||
if DDFlag {
|
if DDFlag {
|
||||||
globals.SugarLogger.Debug("进入DDFlag 特殊处理运费模板、起送价、打包费、自动运力设置")
|
|
||||||
if err := tiktok_store.SpecialTreat(storeMap.VendorOrgCode, utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.StoreID), int64(storeMap.DeliveryFeeDeductionFee), int64(storeMap.DeliveryFeeDeductionSill), utils.Str2Int64(storeMap.YbStorePrefix), storeMap.YbAppID); err != nil {
|
if err := tiktok_store.SpecialTreat(storeMap.VendorOrgCode, utils.Str2Int64(storeMap.VendorStoreID), int64(storeMap.StoreID), int64(storeMap.DeliveryFeeDeductionFee), int64(storeMap.DeliveryFeeDeductionSill), utils.Str2Int64(storeMap.YbStorePrefix), storeMap.YbAppID); err != nil {
|
||||||
errList.AddErr(fmt.Errorf("抖店运费模板、起送价、打包费、自动运力设置相关处理错误:%v", err))
|
errList.AddErr(fmt.Errorf("抖店运费模板、起送价、打包费、自动运力设置相关处理错误:%v", err))
|
||||||
}
|
}
|
||||||
@@ -2289,7 +2287,6 @@ func UpdateStoreName() error {
|
|||||||
sql := ` SELECT * FROM store_courier_map WHERE vendor_id IN (?,?,?,?) AND deleted_at = ?`
|
sql := ` SELECT * FROM store_courier_map WHERE vendor_id IN (?,?,?,?) AND deleted_at = ?`
|
||||||
courierList := make([]*model.StoreCourierMap, 0, 0)
|
courierList := make([]*model.StoreCourierMap, 0, 0)
|
||||||
if err := dao.GetRows(db, &courierList, sql, []interface{}{model.VendorIDMTPS, model.VendorIDFengNiao, model.VendorIDDada, model.VendorIDUUPT, utils.DefaultTimeValue}...); err != nil {
|
if err := dao.GetRows(db, &courierList, sql, []interface{}{model.VendorIDMTPS, model.VendorIDFengNiao, model.VendorIDDada, model.VendorIDUUPT, utils.DefaultTimeValue}...); err != nil {
|
||||||
globals.SugarLogger.Debugf("query Order err := %v", err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2309,7 +2306,6 @@ func UpdateStoreName() error {
|
|||||||
|
|
||||||
// ====================================第三方店铺创建=============================
|
// ====================================第三方店铺创建=============================
|
||||||
func updateOrCreateCourierStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (isCreated bool, err error) {
|
func updateOrCreateCourierStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (isCreated bool, err error) {
|
||||||
globals.SugarLogger.Debugf("updateOrCreateCourierStore %s, storeID:%d, vendorStoreID:%s", model.VendorChineseNames[storeDetail.VendorID], storeDetail.ID, storeDetail.VendorStoreID)
|
|
||||||
|
|
||||||
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(storeDetail.VendorID); handlerInfo != nil && handlerInfo.Use4CreateWaybill {
|
if handlerInfo := partner.GetDeliveryPlatformFromVendorID(storeDetail.VendorID); handlerInfo != nil && handlerInfo.Use4CreateWaybill {
|
||||||
if storeDetail.DistrictName == "" {
|
if storeDetail.DistrictName == "" {
|
||||||
|
|||||||
@@ -52,24 +52,24 @@ func CopyOnStoreSkuToOther(ctx *jxcontext.Context, fromVendorStoreId, toStoreId
|
|||||||
//fromCategoryList, _ := fromApi.RetailCatList(utils.Int2Str(fromVendorStoreId))
|
//fromCategoryList, _ := fromApi.RetailCatList(utils.Int2Str(fromVendorStoreId))
|
||||||
//
|
//
|
||||||
//for _, v := range fromCategoryList {
|
//for _, v := range fromCategoryList {
|
||||||
// err := toApi.RetailCatUpdate(toStore.VendorStoreID, v.Name, &mtwmapi.Param4UpdateCat{
|
// categoryErr := toApi.RetailCatUpdate(toStore.VendorStoreID, v.Name, &mtwmapi.Param4UpdateCat{
|
||||||
// CategoryCode: v.Code,
|
// CategoryCode: v.Code,
|
||||||
// Sequence: v.Sequence,
|
// Sequence: v.Sequence,
|
||||||
// })
|
// })
|
||||||
// if err != nil {
|
// if categoryErr != nil {
|
||||||
// globals.SugarLogger.Debugf("err := RetailCatUpdate : %s", utils.Format4Output(err, false))
|
// globals.SugarLogger.Debugf("err := RetailCatUpdate : %v", categoryErr)
|
||||||
// }
|
// }
|
||||||
// if v.Children != nil && len(v.Children) != 0 {
|
// if v.Children != nil && len(v.Children) != 0 {
|
||||||
// for _, c := range v.Children {
|
// for _, c := range v.Children {
|
||||||
// if err := toApi.RetailCatUpdate(toStore.VendorStoreID, v.Name, &mtwmapi.Param4UpdateCat{
|
// if err3 := toApi.RetailCatUpdate(toStore.VendorStoreID, v.Name, &mtwmapi.Param4UpdateCat{
|
||||||
// CategoryNameOrigin: v.Name,
|
// CategoryNameOrigin: v.Name,
|
||||||
// //CategoryCodeOrigin: v.Code,
|
// //CategoryCodeOrigin: v.Code,
|
||||||
// //CategoryCode: v.Code,
|
// //CategoryCode: v.Code,
|
||||||
// SecondaryCategoryCode: c.Code,
|
// SecondaryCategoryCode: c.Code,
|
||||||
// SecondaryCategoryName: c.Name,
|
// SecondaryCategoryName: c.Name,
|
||||||
// Sequence: c.Sequence,
|
// Sequence: c.Sequence,
|
||||||
// }); err != nil {
|
// }); err3 != nil {
|
||||||
// globals.SugarLogger.Debugf("err := RetailCatUpdate Children : %s", utils.Format4Output(c, false))
|
// globals.SugarLogger.Debugf("err := RetailCatUpdate Children : %v", err3)
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
@@ -159,7 +159,6 @@ type Skus struct {
|
|||||||
|
|
||||||
// BatchInitData 批量创建商品
|
// BatchInitData 批量创建商品
|
||||||
func BatchInitData(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi *mtwmapi.API, vendorStoreID string) error {
|
func BatchInitData(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi *mtwmapi.API, vendorStoreID string) error {
|
||||||
globals.SugarLogger.Debugf("===========[] %d", len(fromSku))
|
|
||||||
foodDataList := make([]map[string]interface{}, len(fromSku))
|
foodDataList := make([]map[string]interface{}, len(fromSku))
|
||||||
for i, storeSku := range fromSku {
|
for i, storeSku := range fromSku {
|
||||||
foodData := make(map[string]interface{})
|
foodData := make(map[string]interface{})
|
||||||
@@ -190,6 +189,15 @@ func BatchInitData(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi *mt
|
|||||||
} else {
|
} else {
|
||||||
foodData["category_name"] = storeSku.SecondaryCategoryName
|
foodData["category_name"] = storeSku.SecondaryCategoryName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if storeSku.SecondaryCategoryName == "" && storeSku.SecondaryCategoryCode == "" {
|
||||||
|
if storeSku.SecondaryCategoryCode != "" {
|
||||||
|
foodData["category_code"] = storeSku.CategoryCode
|
||||||
|
} else {
|
||||||
|
foodData["category_name"] = storeSku.CategoryName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foodData["is_sold_out"] = storeSku.IsSoldOut
|
foodData["is_sold_out"] = storeSku.IsSoldOut
|
||||||
foodData["picture"] = storeSku.Picture
|
foodData["picture"] = storeSku.Picture
|
||||||
foodData["picture_contents"] = storeSku.PictureContents
|
foodData["picture_contents"] = storeSku.PictureContents
|
||||||
@@ -226,7 +234,6 @@ func BatchInitData(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi *mt
|
|||||||
if len(foodDataList)%10 != 0 {
|
if len(foodDataList)%10 != 0 {
|
||||||
count += 1
|
count += 1
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debugf("===========[count] %d", count)
|
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
if i == count-1 {
|
if i == count-1 {
|
||||||
failedFoodList, err2 := toApi.RetailBatchInitData(ctx.GetTrackInfo(), vendorStoreID, foodDataList[i*10:])
|
failedFoodList, err2 := toApi.RetailBatchInitData(ctx.GetTrackInfo(), vendorStoreID, foodDataList[i*10:])
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package misc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxcallback/auto_delivery"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -216,10 +217,10 @@ func Init() {
|
|||||||
}, 10*time.Second, 5*time.Minute)
|
}, 10*time.Second, 5*time.Minute)
|
||||||
|
|
||||||
// (自动发单拣货,设置骑手) 刷单用
|
// (自动发单拣货,设置骑手) 刷单用
|
||||||
//ScheduleTimerFuncByInterval(func() {
|
ScheduleTimerFuncByInterval(func() {
|
||||||
// auto_delivery.Init() // 初始化骑手列表
|
auto_delivery.Init() // 初始化骑手列表
|
||||||
// auto_delivery.AutoSettingFakeDelivery()
|
auto_delivery.AutoSettingFakeDelivery()
|
||||||
//}, 10*time.Second, 5*time.Minute)
|
}, 10*time.Second, 5*time.Minute)
|
||||||
|
|
||||||
// 定时任务更新负责人信息
|
// 定时任务更新负责人信息
|
||||||
ScheduleTimerFunc("RefreshStoreOperator", func() {
|
ScheduleTimerFunc("RefreshStoreOperator", func() {
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ type StoreDetail struct {
|
|||||||
YbAppKey string `json:"ybAppKey"`
|
YbAppKey string `json:"ybAppKey"`
|
||||||
YbStorePrefix string `json:"ybStorePrefix"` //vendorID=14 暂存打包费
|
YbStorePrefix string `json:"ybStorePrefix"` //vendorID=14 暂存打包费
|
||||||
|
|
||||||
MtwmToken string `json:"mtwmToken"` // 当vendor为美团时存储美团token,为抖店时存储抖店token
|
MtwmToken string `json:"mtwmToken"` // 当vendor为美团时存储美团token,为抖店时存储抖店token,也储存淘鲜达token,其他品牌门店授权时appkey相同时token不相同
|
||||||
EbaiSupplierID string `json:"ebaiSupplierID"`
|
EbaiSupplierID string `json:"ebaiSupplierID"`
|
||||||
|
|
||||||
BrandName string `json:"brandName"` //品牌信息
|
BrandName string `json:"brandName"` //品牌信息
|
||||||
|
|||||||
@@ -445,7 +445,9 @@ func UpdateFakeWayBillToTiktok() {
|
|||||||
if handler != nil {
|
if handler != nil {
|
||||||
order, _ := partner.CurOrderManager.LoadOrder(fakeWayBill[i].VendorOrderID, fakeWayBill[i].OrderVendorID)
|
order, _ := partner.CurOrderManager.LoadOrder(fakeWayBill[i].VendorOrderID, fakeWayBill[i].OrderVendorID)
|
||||||
if err := handler.GetOrderRider(fakeWayBill[i].VendorOrgCode, order.VendorStoreID, paramsMap); err != nil {
|
if err := handler.GetOrderRider(fakeWayBill[i].VendorOrgCode, order.VendorStoreID, paramsMap); err != nil {
|
||||||
globals.SugarLogger.Debugf("Fake Pull Rider Info Err :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err)
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusDelivery, fmt.Sprintf("Fake Pull Rider Info Err :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err))
|
||||||
|
} else {
|
||||||
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusDelivery, "订单配送中")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,7 +481,9 @@ func UpdateFakeWayBillToTiktok() {
|
|||||||
// 饿百订单推送订单送达
|
// 饿百订单推送订单送达
|
||||||
if fakeWayBill[i].OrderVendorID == model.VendorIDEBAI || fakeWayBill[i].OrderVendorID == model.VendorIDTaoVegetable || fakeWayBill[i].OrderVendorID == model.VendorIDMTWM {
|
if fakeWayBill[i].OrderVendorID == model.VendorIDEBAI || fakeWayBill[i].OrderVendorID == model.VendorIDTaoVegetable || fakeWayBill[i].OrderVendorID == model.VendorIDMTWM {
|
||||||
if err := handler.Swtich2SelfDelivered(order, "JingXiAdmin"); err != nil {
|
if err := handler.Swtich2SelfDelivered(order, "JingXiAdmin"); err != nil {
|
||||||
globals.SugarLogger.Errorf("Swtich2SelfDelivered err := %v", err)
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusDeliveryOver, fmt.Sprintf("%v", err))
|
||||||
|
} else {
|
||||||
|
partner.CurOrderManager.OnOrderMsg(order, tao_vegetable.OrderStatusDeliveryOver, "订单送达")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -307,12 +307,10 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if date == nil {
|
|
||||||
return fmt.Errorf("GetReverseOrder 饿百售后数据查询为空")
|
|
||||||
}
|
|
||||||
|
|
||||||
refundProductList := make([]*ebaiapi.RefundProductList, 0, 0)
|
refundProductList := make([]*ebaiapi.RefundProductList, 0, 0)
|
||||||
removerAll := false
|
removerAll := false
|
||||||
|
if date != nil && len(date) != model.NO {
|
||||||
for k, v := range date {
|
for k, v := range date {
|
||||||
v2 := v.(map[string]interface{})
|
v2 := v.(map[string]interface{})
|
||||||
refundProduct := &ebaiapi.RefundProductList{
|
refundProduct := &ebaiapi.RefundProductList{
|
||||||
@@ -332,6 +330,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
refundProductList = append(refundProductList, refundProduct)
|
refundProductList = append(refundProductList, refundProduct)
|
||||||
}
|
}
|
||||||
param.RefundProductList = refundProductList
|
param.RefundProductList = refundProductList
|
||||||
|
}
|
||||||
|
|
||||||
//售后部分多次退款
|
//售后部分多次退款
|
||||||
if removerAll {
|
if removerAll {
|
||||||
@@ -340,17 +339,6 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
|||||||
if reason == "" {
|
if reason == "" {
|
||||||
return fmt.Errorf("拒绝退单时,请填写拒单原因")
|
return fmt.Errorf("拒绝退单时,请填写拒单原因")
|
||||||
}
|
}
|
||||||
|
|
||||||
//param := &ebaiapi.RefundOrderExamine{
|
|
||||||
// ReverseOrderId: afsOrderInfo.AfsOrderID,
|
|
||||||
// OrderId: afsOrderInfo.VendorOrderID,
|
|
||||||
// IdempotentId: utils.Int64ToStr(time.Now().UnixNano()),
|
|
||||||
// ActionType: ebaiapi.RefundTypeRefuse,
|
|
||||||
// ReasonCode: "7001",
|
|
||||||
// ReasonRemarks: reason,
|
|
||||||
// RefundProductList: "",
|
|
||||||
//}
|
|
||||||
//err = api.EbaiAPI.OrderPartRefund(param)
|
|
||||||
if err := api.EbaiAPI.OrderPartRefund(order.VendorOrderID, orderSkus2AfsSkus(refundSkuList)); err != nil {
|
if err := api.EbaiAPI.OrderPartRefund(order.VendorOrderID, orderSkus2AfsSkus(refundSkuList)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,6 +168,7 @@ func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mtwmapi.Err2CallbackResponse(err, "")
|
return mtwmapi.Err2CallbackResponse(err, "")
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ func (c *PurchaseHandler) RefreshComment(fromTime, toTime time.Time) (err error)
|
|||||||
task := tasksch.NewParallelTask("mtwm RefreshComment", nil, jxcontext.AdminCtx,
|
task := tasksch.NewParallelTask("mtwm RefreshComment", nil, jxcontext.AdminCtx,
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
storeID := batchItemList[0].(int)
|
storeID := batchItemList[0].(int)
|
||||||
|
|
||||||
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDMTWM, "")
|
||||||
commentList, _ := getAPI(storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID).CommentQuery(storeDetail.VendorStoreID, startDateStr, endDateStr, 0, 0, mtwmapi.CommentReplyStatusNotReplied)
|
commentList, _ := getAPI(storeDetail.VendorOrgCode, storeID, storeDetail.VendorStoreID).CommentQuery(storeDetail.VendorStoreID, startDateStr, endDateStr, 0, 0, mtwmapi.CommentReplyStatusNotReplied)
|
||||||
var orderCommentList []*model.OrderComment
|
var orderCommentList []*model.OrderComment
|
||||||
|
|||||||
@@ -488,9 +488,11 @@ func (c *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI
|
|||||||
DelivererCompany: nil,
|
DelivererCompany: nil,
|
||||||
LogisticsNo: nil,
|
LogisticsNo: nil,
|
||||||
}
|
}
|
||||||
|
for i := 0; i < 3; i++ {
|
||||||
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), order.VendorStoreID).DeliveryFinish(param)
|
err = getAPI(order.VendorOrgCode, jxutils.GetSaleStoreIDFromOrder(order), order.VendorStoreID).DeliveryFinish(param)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
globals.SugarLogger.Warnf("tao AcceptOrRefuseOrder orderID:%s failed with err:%v", order.VendorOrderID, err)
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = c.CancelOrder(jxcontext.AdminCtx, order, "bu")
|
err = c.CancelOrder(jxcontext.AdminCtx, order, "bu")
|
||||||
@@ -765,7 +767,7 @@ func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.Goods
|
|||||||
|
|
||||||
workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0)
|
workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0)
|
||||||
|
|
||||||
orderDetail, err := getAPI(order.VendorOrgCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
orderDetail, err := getAPI(order.VendorOrgCode, order.JxStoreID, order.VendorStoreID).QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
||||||
StoreId: utils.String2Pointer(order.VendorStoreID),
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||||
}})
|
}})
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func orderStatusChangeNotice(order *model.GoodsOrder, orderStatus string) (*requ
|
|||||||
if len(skuList) == model.NO {
|
if len(skuList) == model.NO {
|
||||||
return nil, fmt.Errorf("订单商品列表为零,请管理员检查")
|
return nil, fmt.Errorf("订单商品列表为零,请管理员检查")
|
||||||
}
|
}
|
||||||
orderDetail, err := getAPI(order.VendorOrgCode, 0, "").QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
orderDetail, err := getAPI(order.VendorOrgCode, order.JxStoreID, order.VendorStoreID).QueryOrderDetail(&request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
|
||||||
StoreId: utils.String2Pointer(order.VendorStoreID),
|
StoreId: utils.String2Pointer(order.VendorStoreID),
|
||||||
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
BizOrderId: utils.Int64ToPointer(utils.Str2Int64(order.VendorOrderID)),
|
||||||
}})
|
}})
|
||||||
@@ -92,8 +92,8 @@ func OrderStatusChangeDelivery(order *model.GoodsOrder, orderStatus string) *req
|
|||||||
}
|
}
|
||||||
|
|
||||||
if param.WorkCallbackRequest.DelivererName == nil || param.WorkCallbackRequest.DelivererPhone == nil {
|
if param.WorkCallbackRequest.DelivererName == nil || param.WorkCallbackRequest.DelivererPhone == nil {
|
||||||
param.WorkCallbackRequest.DelivererName = utils.String2Pointer(storeDetail.Tel1)
|
param.WorkCallbackRequest.DelivererName = utils.String2Pointer("门店老板")
|
||||||
param.WorkCallbackRequest.DelivererPhone = utils.String2Pointer("门店老板")
|
param.WorkCallbackRequest.DelivererPhone = utils.String2Pointer(storeDetail.Tel1)
|
||||||
param.WorkCallbackRequest.DelivererCompany = utils.String2Pointer(tao_vegetable.TaoDeliveryTypeSELF)
|
param.WorkCallbackRequest.DelivererCompany = utils.String2Pointer(tao_vegetable.TaoDeliveryTypeSELF)
|
||||||
param.WorkCallbackRequest.LogisticsNo = utils.String2Pointer(order.VendorOrderID + "_1")
|
param.WorkCallbackRequest.LogisticsNo = utils.String2Pointer(order.VendorOrderID + "_1")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ type Point struct {
|
|||||||
|
|
||||||
// UpdateTxdStore 单独更新淘鲜达门店营业时间/状态 销售范围
|
// UpdateTxdStore 单独更新淘鲜达门店营业时间/状态 销售范围
|
||||||
func UpdateTxdStore(store TxdStore, vendorOrgCode string) (err error) {
|
func UpdateTxdStore(store TxdStore, vendorOrgCode string) (err error) {
|
||||||
a := getAPI(vendorOrgCode, 0, "")
|
a := getAPI(vendorOrgCode, 0, store.TxdStoreID)
|
||||||
errList := errlist.New()
|
errList := errlist.New()
|
||||||
for _, v := range store.Flag {
|
for _, v := range store.Flag {
|
||||||
switch v {
|
switch v {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package tao_vegetable
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@@ -219,5 +220,19 @@ func getAPI(appOrgCode string, storeID int, vendorStoreID string) (apiObj *tao_v
|
|||||||
} else {
|
} else {
|
||||||
apiObj = nil
|
apiObj = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if apiObj != nil {
|
||||||
|
if storeID != model.NO {
|
||||||
|
storeMap, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDTaoVegetable, "")
|
||||||
|
if storeMap.MtwmToken != "" {
|
||||||
|
apiObj.SetToken(storeMap.MtwmToken)
|
||||||
|
}
|
||||||
|
} else if vendorStoreID != "" {
|
||||||
|
storeMap, _ := dao.GetStoreDetailForDD(dao.GetDB(), 0, model.VendorIDTaoVegetable, vendorStoreID, "")
|
||||||
|
if storeMap.MtwmToken != "" {
|
||||||
|
apiObj.SetToken(storeMap.MtwmToken)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return apiObj
|
return apiObj
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
product_addV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_addV2/response"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"unicode"
|
"unicode"
|
||||||
@@ -157,11 +158,32 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
}
|
}
|
||||||
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品,同步主商品
|
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品,同步主商品
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//dao.UpdateThingMap(db, model.ThingTypeSyncFail, utils.Int64ToStr(time.Now().Unix()), storeSku.SkuID, model.VendorIDDD, storeDetail.VendorOrgCode)
|
if strings.Contains(err.Error(), "outProductId或者outerProductId已经存在") { // 主品以创建但是未返回出来
|
||||||
|
mainProductDetail, _ := api.GetSkuDetail("", utils.Int2Str(storeSku.SkuID))
|
||||||
|
if mainProductDetail != nil || mainProductDetail.ProductId != 0 {
|
||||||
|
tiktokResult.ProductId = mainProductDetail.ProductId
|
||||||
|
|
||||||
|
specPrices := make([]product_addV2_response.SkuItem, 0, 0)
|
||||||
|
for _, v := range mainProductDetail.SpecPrices {
|
||||||
|
specPrices = append(specPrices, product_addV2_response.SkuItem{
|
||||||
|
SkuId: v.SkuId,
|
||||||
|
OutSkuId: v.OutSkuId,
|
||||||
|
OuterSkuId: v.OuterSkuId,
|
||||||
|
Code: v.Code,
|
||||||
|
SpecDetailId1: v.SpecDetailId1,
|
||||||
|
SpecDetailId2: v.SpecDetailId2,
|
||||||
|
SpecDetailId3: v.SpecDetailId3,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
tiktokResult.Sku = specPrices
|
||||||
|
} else {
|
||||||
storeSku.SkuSyncStatus = model.SyncFlagNewMask // 只创建主品,子品都没做
|
storeSku.SkuSyncStatus = model.SyncFlagNewMask // 只创建主品,子品都没做
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
//dao.UpdateThingMap(db, model.ThingTypeSyncFail, utils.Int64ToStr(time.Now().Unix()), storeSku.SkuID, model.VendorIDDD, storeDetail.VendorOrgCode)
|
||||||
|
}
|
||||||
|
|
||||||
if tiktokResult.ProductId > model.NO {
|
if tiktokResult.ProductId > model.NO {
|
||||||
dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, "创建成功", model.ThingTypeSku, model.ThingTypeSyncSuccess)
|
dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, "创建成功", model.ThingTypeSku, model.ThingTypeSyncSuccess)
|
||||||
@@ -304,25 +326,32 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
}
|
}
|
||||||
param.Name = checkNameLenght(param.Name)
|
param.Name = checkNameLenght(param.Name)
|
||||||
|
|
||||||
// 获取上传图,商品轮播图
|
// 暂时只考虑修改白底图,提高效率.其余图片不做修改
|
||||||
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
img, descImg, whiteImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeSku.SkuID, storeSku.DescImg, storeSku.Img, []string{storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5})
|
||||||
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)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
param.Pic = img
|
param.Pic = img
|
||||||
param.Description = detailImg
|
param.Description = descImg
|
||||||
|
param.WhiteBackGroundPicUrl = whiteImg
|
||||||
param.WeightUnit = tiktokShop.WeightUint_G
|
param.WeightUnit = tiktokShop.WeightUint_G
|
||||||
|
|
||||||
// 部分商品没有所属的分类,直接跳过!
|
// 部分商品没有所属的分类,直接跳过!
|
||||||
if storeSku.SkuVendorMapCatID != "" {
|
if storeSku.SkuVendorMapCatID != "" {
|
||||||
param.CategoryLeafId = utils.Str2Int64(storeSku.SkuVendorMapCatID)
|
param.CategoryLeafId = utils.Str2Int64(storeSku.SkuVendorMapCatID)
|
||||||
} else if len(param.Pic) != 0 { // 自动推导分类id
|
} else if len(param.Pic) != 0 { // 自动推导分类id
|
||||||
param.CategoryLeafId, err = api.GetRecommendCategory(strings.Split(img, "|"))
|
var vendorCategoryId int64 = 0
|
||||||
if param.CategoryLeafId == 0 || err != nil {
|
// 根据图片推导分类
|
||||||
|
vendorCategoryId, _ = api.GetRecommendCategory(strings.Split(img, "|"))
|
||||||
|
if vendorCategoryId == 0 {
|
||||||
|
vendorCategoryId, _ = api.GetRecommendCategoryByName(storeSku.SkuName)
|
||||||
|
}
|
||||||
|
if vendorCategoryId == 0 || err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误:"+err.Error()), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误:"+err.Error()), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
param.CategoryLeafId = vendorCategoryId
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取主商品id
|
// 获取主商品id
|
||||||
@@ -341,36 +370,17 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 更新商品,主品如果名字和类目没变化,则更新子品价格!
|
// 更新商品,主品如果名字和类目没变化,则更新子品价格!
|
||||||
mainProductDetail, err := api.GetSkuDetail(utils.Int64ToStr(mainIdInt), "")
|
//mainProductDetail, err := api.GetSkuDetail(utils.Int64ToStr(mainIdInt), "")
|
||||||
if err != nil || mainProductDetail == nil {
|
//if err != nil || mainProductDetail == nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if mainProductDetail.Name == param.Name && (mainProductDetail.CategoryDetail.ThirdCid == param.CategoryLeafId || mainProductDetail.CategoryDetail.FourthCid == param.CategoryLeafId) {
|
|
||||||
// 更新子品,同步方法会更新子品的同时去更新库存和价格!删除之后接下的同步步骤失效!
|
|
||||||
//if err := api.DeleteStoreCommodity(utils.Str2Int64(storeSku.VendorSkuID)); err != nil {
|
|
||||||
// failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
// failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
// storeSku.SkuSyncStatus = model.SyncFlagStoreSkuModifiedMask
|
|
||||||
// continue
|
// continue
|
||||||
//}
|
//}
|
||||||
//childrenProductId, err := api.CreateSubProduct(mainIdInt, utils.Str2Int64(vendorStoreID))
|
//if mainProductDetail.Name == param.Name && (mainProductDetail.CategoryDetail.ThirdCid == param.CategoryLeafId || mainProductDetail.CategoryDetail.FourthCid == param.CategoryLeafId) {
|
||||||
//if err != nil {
|
// // 更新子品,同步方法会更新子品的同时去更新库存和价格!删除之后接下的同步步骤失效!
|
||||||
// failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
// failedList2 := upDateChildrenPriceStockLaunch(api, storeSku, utils.Str2Int64(storeSku.VendorSkuID), vendorStoreID, syncType)
|
||||||
// storeSku.SkuSyncStatus = model.SyncFlagStoreSkuModifiedMask
|
// failedList = append(failedList, failedList2...)
|
||||||
// continue
|
// continue
|
||||||
//}
|
//}
|
||||||
//if (err != nil || childrenProductId == 0) && !strings.Contains(err.Error(), "2010001") { // 2010001:重复创建渠道商品,就去更新
|
|
||||||
// continue
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//// 同步价格,库存,上架
|
|
||||||
//storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
|
||||||
//storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
|
||||||
failedList2 := upDateChildrenPriceStockLaunch(api, storeSku, utils.Str2Int64(storeSku.VendorSkuID), vendorStoreID, syncType)
|
|
||||||
failedList = append(failedList, failedList2...)
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取商品的属性
|
// 获取商品的属性
|
||||||
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" || storeSku.UpcTiktokBrandId == "" {
|
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" || storeSku.UpcTiktokBrandId == "" {
|
||||||
@@ -397,9 +407,13 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
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)
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||||
|
} else {
|
||||||
|
// todo 暂时关闭之后解开
|
||||||
|
//upDateChildrenPriceStockLaunch(api, storeSku, utils.Str2Int64(storeSku.VendorSkuID), vendorStoreID, syncType)
|
||||||
}
|
}
|
||||||
|
|
||||||
storeSku.SkuSyncStatus = model.SyncFlagStoreSkuModifiedMask // 品库修改 售卖状态待同步 价格待同步
|
//storeSku.SkuSyncStatus = model.SyncFlagStoreSkuModifiedMask // 品库修改 售卖状态待同步 价格待同步
|
||||||
|
storeSku.SkuSyncStatus = 0 // 品库修改 售卖状态待同步 价格待同步
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -427,23 +441,29 @@ func makeMainProductSku(db *dao.DaoDB, api *tiktokShop.API, storeSku *dao.StoreS
|
|||||||
param.Name = checkNameLenght(param.Name)
|
param.Name = checkNameLenght(param.Name)
|
||||||
|
|
||||||
// 获取上传图,商品轮播图
|
// 获取上传图,商品轮播图
|
||||||
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
img, detailImg, whiteImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeSku.SkuID, storeSku.DescImg, storeSku.Img, []string{storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
param.Pic = img
|
param.Pic = img
|
||||||
param.Description = detailImg
|
param.Description = detailImg
|
||||||
|
param.WhiteBackGroundPicUrl = whiteImg
|
||||||
|
|
||||||
// 部分商品没有所属的分类,直接跳过!
|
// 部分商品没有所属的分类,直接跳过!
|
||||||
if storeSku.SkuVendorMapCatID != "" {
|
if storeSku.SkuVendorMapCatID != "" {
|
||||||
param.CategoryLeafId = utils.Str2Int64(storeSku.SkuVendorMapCatID)
|
param.CategoryLeafId = utils.Str2Int64(storeSku.SkuVendorMapCatID)
|
||||||
} else if len(param.Pic) != 0 { // 自动推导分类id
|
} else if len(param.Pic) != 0 { // 自动推导分类id
|
||||||
param.CategoryLeafId, err = api.GetRecommendCategory(strings.Split(img, "|"))
|
var vendorCategoryId int64 = 0
|
||||||
if param.CategoryLeafId == 0 || err != nil {
|
vendorCategoryId, _ = api.GetRecommendCategory(strings.Split(img, "|")) // 根据图片推导分类
|
||||||
|
if vendorCategoryId == 0 {
|
||||||
|
vendorCategoryId, _ = api.GetRecommendCategoryByName(storeSku.SkuName) // 根据名字推导分类
|
||||||
|
}
|
||||||
|
if vendorCategoryId == 0 || err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误:"+err.Error()), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误:"+err.Error()), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
param.CategoryLeafId = vendorCategoryId
|
||||||
}
|
}
|
||||||
// 这个情况是原有商品不存在和推荐查询不到类目id是,使用京西类目和抖音类目的绑定关系
|
// 这个情况是原有商品不存在和推荐查询不到类目id是,使用京西类目和抖音类目的绑定关系
|
||||||
// 但是不太实用,导致商品类目错误被暂停营业等
|
// 但是不太实用,导致商品类目错误被暂停营业等
|
||||||
@@ -882,8 +902,35 @@ func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (*product_g
|
|||||||
//return string(productFormatNew), nil
|
//return string(productFormatNew), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTiktokImgList 获取抖音图片链接
|
// GetTiktokImgList 获取抖音图片链接 whiteImg 白底图,有的商品可能没有白底图随便用一张(创建商品专用,更新商品只考虑更新白底图,不然太慢了)
|
||||||
func GetTiktokImgList(api *tiktokShop.API, storeId, appOrgCode string, detailImg string, img ...string) (string, string, error) {
|
func GetTiktokImgList(api *tiktokShop.API, storeId string, skuId int, detailImg, whiteImg string, img []string) (string, string, string, error) {
|
||||||
|
detailTiktok := ""
|
||||||
|
whiteTiktok := ""
|
||||||
|
tiktokImgLocal, err := dao.GetVendorImg(skuId, model.VendorIDDD)
|
||||||
|
if err == nil && tiktokImgLocal != nil && tiktokImgLocal.Img != "" {
|
||||||
|
localImgs := make([]string, 0, 0)
|
||||||
|
localImgs = append(localImgs, tiktokImgLocal.Img)
|
||||||
|
whiteTiktok = tiktokImgLocal.Img
|
||||||
|
if tiktokImgLocal.Img2 != "" {
|
||||||
|
localImgs = append(localImgs, tiktokImgLocal.Img2)
|
||||||
|
}
|
||||||
|
if tiktokImgLocal.Img3 != "" {
|
||||||
|
localImgs = append(localImgs, tiktokImgLocal.Img3)
|
||||||
|
}
|
||||||
|
if tiktokImgLocal.Img4 != "" {
|
||||||
|
localImgs = append(localImgs, tiktokImgLocal.Img4)
|
||||||
|
}
|
||||||
|
if tiktokImgLocal.Img5 != "" {
|
||||||
|
localImgs = append(localImgs, tiktokImgLocal.Img5)
|
||||||
|
}
|
||||||
|
if tiktokImgLocal.DescImg != "" {
|
||||||
|
detailTiktok = tiktokImgLocal.DescImg
|
||||||
|
} else {
|
||||||
|
detailTiktok = tiktokImgLocal.Img
|
||||||
|
}
|
||||||
|
return strings.Join(localImgs, "|"), detailTiktok, whiteTiktok, nil
|
||||||
|
}
|
||||||
|
|
||||||
imgs := make([]tiktokShop.Imgs, 0, 0)
|
imgs := make([]tiktokShop.Imgs, 0, 0)
|
||||||
for _, v := range img {
|
for _, v := range img {
|
||||||
if v != "" {
|
if v != "" {
|
||||||
@@ -899,27 +946,105 @@ func GetTiktokImgList(api *tiktokShop.API, storeId, appOrgCode string, detailImg
|
|||||||
Url: detailImg,
|
Url: detailImg,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if whiteImg != "" {
|
||||||
|
imgs = append(imgs, tiktokShop.Imgs{
|
||||||
|
Name: "white_" + storeId + "_" + whiteImg[21:54],
|
||||||
|
Url: whiteImg,
|
||||||
|
})
|
||||||
|
}
|
||||||
tiktokImgList, err := api.BatchUploadImages(imgs)
|
tiktokImgList, err := api.BatchUploadImages(imgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
detailTiktok := ""
|
|
||||||
var tiktokImg []string
|
var tiktokImg []string
|
||||||
|
var localTiktokObj = &model.TaoSkuImg{
|
||||||
|
SkuID: skuId,
|
||||||
|
VendorID: model.VendorIDDD,
|
||||||
|
}
|
||||||
for k, v := range tiktokImgList {
|
for k, v := range tiktokImgList {
|
||||||
if strings.Contains(k, "detail_") {
|
if strings.Contains(k, "detail_") {
|
||||||
detailTiktok = v.ByteUrl
|
detailTiktok = v.ByteUrl
|
||||||
|
localTiktokObj.DescImg = v.ByteUrl
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if strings.Contains(k, "white_") {
|
||||||
|
whiteTiktok = v.ByteUrl
|
||||||
|
localTiktokObj.Img = v.ByteUrl
|
||||||
|
}
|
||||||
tiktokImg = append(tiktokImg, v.ByteUrl)
|
tiktokImg = append(tiktokImg, v.ByteUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
if detailTiktok == "" {
|
if detailTiktok == "" {
|
||||||
detailTiktok = tiktokImg[0]
|
detailTiktok = tiktokImg[0]
|
||||||
|
localTiktokObj.DescImg = detailTiktok
|
||||||
|
}
|
||||||
|
if whiteTiktok == "" {
|
||||||
|
whiteTiktok = tiktokImg[0]
|
||||||
|
localTiktokObj.Img = whiteTiktok
|
||||||
|
}
|
||||||
|
switch len(tiktokImg) {
|
||||||
|
case 2:
|
||||||
|
localTiktokObj.Img2 = tiktokImg[0]
|
||||||
|
localTiktokObj.Img3 = tiktokImg[1]
|
||||||
|
case 3:
|
||||||
|
localTiktokObj.Img2 = tiktokImg[0]
|
||||||
|
localTiktokObj.Img3 = tiktokImg[1]
|
||||||
|
localTiktokObj.Img4 = tiktokImg[2]
|
||||||
|
case 4:
|
||||||
|
localTiktokObj.Img2 = tiktokImg[0]
|
||||||
|
localTiktokObj.Img3 = tiktokImg[1]
|
||||||
|
localTiktokObj.Img4 = tiktokImg[2]
|
||||||
|
localTiktokObj.Img5 = tiktokImg[3]
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.Join(tiktokImg, "|"), detailTiktok, nil
|
dao.CreateEntity(dao.GetDB(), localTiktokObj)
|
||||||
|
return strings.Join(tiktokImg, "|"), detailTiktok, whiteTiktok, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetWhiteImg 更新专用暂时只考虑更新白底图
|
||||||
|
//func GetWhiteImg(api *tiktokShop.API, skuId int, storeId, whiteImg string) (string, error) {
|
||||||
|
// //每个图片都上传太慢了
|
||||||
|
// tiktokImgLocal, err := dao.GetVendorImg(skuId, model.VendorIDDD)
|
||||||
|
// if err == nil && tiktokImgLocal != nil && tiktokImgLocal.Img != "" {
|
||||||
|
// return tiktokImgLocal.Img, nil
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// imgs := make([]tiktokShop.Imgs, 0, 0)
|
||||||
|
// if whiteImg == "" {
|
||||||
|
// return "", fmt.Errorf("商品白底图不能为空")
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// imgs = append(imgs, tiktokShop.Imgs{
|
||||||
|
// Name: "white_" + storeId + "_" + whiteImg[21:54],
|
||||||
|
// Url: whiteImg,
|
||||||
|
// })
|
||||||
|
//
|
||||||
|
// tiktokImgList, err := api.BatchUploadImages(imgs)
|
||||||
|
// if err != nil {
|
||||||
|
// return "", err
|
||||||
|
// }
|
||||||
|
// if len(tiktokImgList) == model.NO {
|
||||||
|
// return "", fmt.Errorf("白底图片上传失败")
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// whiteTiktok := ""
|
||||||
|
// var tiktokImg []string
|
||||||
|
// for k, v := range tiktokImgList {
|
||||||
|
// if strings.Contains(k, "white_") {
|
||||||
|
// whiteTiktok = v.ByteUrl
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// tiktokImg = append(tiktokImg, v.ByteUrl)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if whiteTiktok == "" {
|
||||||
|
// whiteTiktok = tiktokImg[0]
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return whiteTiktok, nil
|
||||||
|
//}
|
||||||
|
|
||||||
func MakeProductFormatNew(api *tiktokShop.API, skuNameId int64, categoryLeafId int64, upcCode, upcBrandName, upcTiktokBrandId string) (string, int64, error) {
|
func MakeProductFormatNew(api *tiktokShop.API, skuNameId int64, categoryLeafId int64, upcCode, upcBrandName, upcTiktokBrandId string) (string, int64, error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
categoryList, err := api.GetCatePropertyV2(categoryLeafId)
|
categoryList, err := api.GetCatePropertyV2(categoryLeafId)
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/jx-callback/business/bidding"
|
"git.rosy.net.cn/jx-callback/business/bidding"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner/delivery"
|
"git.rosy.net.cn/jx-callback/business/partner/delivery"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -872,7 +871,6 @@ func (c *OrderController) PartRefundOrder() {
|
|||||||
order, err = partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID)
|
order, err = partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
removedAll, err2 := fillSkuList(skuList, order.Skus)
|
removedAll, err2 := fillSkuList(skuList, order.Skus)
|
||||||
globals.SugarLogger.Debugf("========removedAll := %v", removedAll)
|
|
||||||
if err = err2; err == nil {
|
if err = err2; err == nil {
|
||||||
if removedAll {
|
if removedAll {
|
||||||
err = defsch.FixedScheduler.RefundOrder(params.Ctx, order, params.Reason)
|
err = defsch.FixedScheduler.RefundOrder(params.Ctx, order, params.Reason)
|
||||||
|
|||||||
@@ -223,8 +223,9 @@ func (c *TaoBaoVegetableController) CancelOnSaleRefundOrder() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), afsOrder)
|
//callbackResponse := taoVegetable.OnCallbackMsg(tao_vegetable.OrderStatusOnSaleCancel, utils.Int64ToStr(afsOrder.PartCancelRequest.BizOrderId), afsOrder)
|
||||||
c.Data["json"] = callbackResponse
|
//c.Data["json"] = callbackResponse
|
||||||
|
c.Data["json"] = tao_vegetable.CallBackResultOnSaleCancel(fmt.Errorf("不支持售中取消"))
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
|
|||||||
}
|
}
|
||||||
case model.VendorIDTaoVegetable:
|
case model.VendorIDTaoVegetable:
|
||||||
api2 := api.TaoVegetableApi
|
api2 := api.TaoVegetableApi
|
||||||
if api2 == nil || api2.GetToken() == "" {
|
|
||||||
codes, _ := dao.GetVendorOrgCode(db, vendorID, appOrgCode, "platform")
|
codes, _ := dao.GetVendorOrgCode(db, vendorID, appOrgCode, "platform")
|
||||||
if len(codes) == 0 {
|
if len(codes) == 0 {
|
||||||
return nil
|
return nil
|
||||||
@@ -88,7 +87,6 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
api.TaoVegetableApi = api2
|
api.TaoVegetableApi = api2
|
||||||
}
|
|
||||||
|
|
||||||
pfAPI = api2
|
pfAPI = api2
|
||||||
case model.VendorIDEBAI:
|
case model.VendorIDEBAI:
|
||||||
|
|||||||
Reference in New Issue
Block a user