This commit is contained in:
邹宗楠
2024-04-19 10:14:36 +08:00
parent 55b24bb283
commit 7a3a7d18f8
4 changed files with 135 additions and 24 deletions

View File

@@ -1,6 +1,7 @@
package cms package cms
import ( import (
"encoding/json"
"fmt" "fmt"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
@@ -17,37 +18,59 @@ import (
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
) )
const (
SyncTypeSku = 1
SyncTypeAct = 2
SyncTypeAll = 3
)
// CopyOnStoreSkuToOther 将一个美团门店分类和商品复制到另一个门店 // CopyOnStoreSkuToOther 将一个美团门店分类和商品复制到另一个门店
func CopyOnStoreSkuToOther(ctx *jxcontext.Context, fromStoreId, toStoreId string, vendorId int, isAsync bool, offSet int) (hint string, err error) { func CopyOnStoreSkuToOther(ctx *jxcontext.Context, fromStoreId, toStoreId string, vendorId int, isAsync bool, offSet int, syncType int) ([]error, error) {
var ( var (
db = dao.GetDB() db = dao.GetDB()
copySkuErr = make([]error, 0, 0)
err error
) )
// 门店api加载 // 门店api加载
toStore, err := dao.GetStoreDetailByVendorStoreID(db, toStoreId, vendorId, "") toStore, err := dao.GetStoreDetailByVendorStoreID(db, toStoreId, vendorId, "")
if err != nil { if err != nil {
return "", err return nil, err
} }
fromStore, err := dao.GetStoreDetailByVendorStoreID(db, fromStoreId, vendorId, "") fromStore, err := dao.GetStoreDetailByVendorStoreID(db, fromStoreId, vendorId, "")
if err != nil { if err != nil {
return "", err return nil, err
} }
if syncType == SyncTypeSku || syncType == SyncTypeAll {
switch vendorId { switch vendorId {
case model.VendorIDMTWM: case model.VendorIDMTWM:
return CopyMtToMT(ctx, fromStore, toStore, isAsync, offSet) _, copySkuErr, err = CopyMtToMT(ctx, fromStore, toStore, isAsync, offSet)
case model.VendorIDEBAI: case model.VendorIDEBAI:
return CopyEBaiToEBai(ctx, fromStore, toStore, isAsync, offSet) _, copySkuErr, err = CopyEBaiToEBai(ctx, fromStore, toStore, isAsync, offSet)
default: default:
return "", fmt.Errorf("暂时还不支持") return nil, fmt.Errorf("暂时还不支持")
} }
}
if syncType == SyncTypeAct || syncType == SyncTypeAll {
if vendorId == model.VendorIDMTWM {
}
}
return copySkuErr, err
} }
//#region 同步商品
// CopyEBaiToEBai 饿了么商品复制到饿了么 // CopyEBaiToEBai 饿了么商品复制到饿了么
func CopyEBaiToEBai(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isAsync bool, offset int) (hint string, err error) { func CopyEBaiToEBai(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isAsync bool, offset int) (hint string, errList []error, err error) {
VendorCategoryIDMap := map[int64]int64{} VendorCategoryIDMap := map[int64]int64{}
var errListData = make([]error, 0, 0)
api := api.EbaiAPI api := api.EbaiAPI
taskName := fmt.Sprintf("将饿了么平台门店[%s],分类和商品复制到[%s]", fromStore.VendorStoreID, toStore.VendorStoreID) taskName := fmt.Sprintf("将饿了么平台门店[%s],分类和商品复制到[%s]", fromStore.VendorStoreID, toStore.VendorStoreID)
config := tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(false) config := tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(false)
work := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { work := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
@@ -94,8 +117,10 @@ func CopyEBaiToEBai(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail,
if len(fromFoodList.List) == 0 || fromFoodList == nil { if len(fromFoodList.List) == 0 || fromFoodList == nil {
return nil, fmt.Errorf("fromFoodList 为空 %s ,i:= %d", utils.Format4Output(err1, false), i) return nil, fmt.Errorf("fromFoodList 为空 %s ,i:= %d", utils.Format4Output(err1, false), i)
} }
if err = BatchInitSkuEBai2EBai(ctx, fromFoodList.List, api, utils.Int2Str(toStore.ID), VendorCategoryIDMap); err != nil { errList := BatchInitSkuEBai2EBai(ctx, fromFoodList.List, api, utils.Int2Str(toStore.ID), VendorCategoryIDMap)
globals.SugarLogger.Debugf("BatchInitData : %s", utils.Format4Output(err, false)) if errList != nil {
errListData = append(errListData, errList...)
globals.SugarLogger.Debugf("BatchInitData : %s", utils.Format4Output(errList, false))
} }
i = i + 1 i = i + 1
} }
@@ -111,11 +136,12 @@ func CopyEBaiToEBai(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail,
} else { } else {
hint = task.ID hint = task.ID
} }
return hint, err return hint, errList, err
} }
// BatchInitSkuEBai2EBai 批量创建商品 // BatchInitSkuEBai2EBai 批量创建商品
func BatchInitSkuEBai2EBai(ctx *jxcontext.Context, fromSku []*ebaiapi.SkuInfo, toApi *ebaiapi.API, storeID string, VendorCategoryIDMap map[int64]int64) error { func BatchInitSkuEBai2EBai(ctx *jxcontext.Context, fromSku []*ebaiapi.SkuInfo, toApi *ebaiapi.API, storeID string, VendorCategoryIDMap map[int64]int64) []error {
var errList = make([]error, 0, 0)
for _, storeSku := range fromSku { for _, storeSku := range fromSku {
params := map[string]interface{}{ params := map[string]interface{}{
"left_num": model.MaxStoreSkuStockQty, "left_num": model.MaxStoreSkuStockQty,
@@ -144,17 +170,19 @@ func BatchInitSkuEBai2EBai(ctx *jxcontext.Context, fromSku []*ebaiapi.SkuInfo, t
} }
_, err := toApi.SkuCreate(ctx.GetTrackInfo(), storeID, utils.Str2Int64(storeSku.CustomSkuID), params) _, err := toApi.SkuCreate(ctx.GetTrackInfo(), storeID, utils.Str2Int64(storeSku.CustomSkuID), params)
if err != nil { if err != nil {
globals.SugarLogger.Debugf("错误商品id: %d,商品名称:%s, %v", storeSku.SkuId, storeSku.Name, err) errList = append(errList, err)
} }
} }
return nil return errList
} }
// CopyMtToMT 美团商品复制到美团 // CopyMtToMT 美团商品复制到美团
func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isAsync bool, offSet int) (hint string, err error) { func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isAsync bool, offSet int) (hint string, data []error, err error) {
var fromApi *mtwmapi.API var fromApi *mtwmapi.API
var toApi *mtwmapi.API var toApi *mtwmapi.API
var errList = make([]*mtwmapi.AppFoodResult, 0, 0)
var errData = make([]error, 0, 0)
if fromStore.VendorOrgCode == globals.Mtwm2Code { if fromStore.VendorOrgCode == globals.Mtwm2Code {
fromApi = mtwmapi.New(beego.AppConfig.DefaultString("mtwmAppID2", ""), beego.AppConfig.DefaultString("mtwmSecret2", ""), beego.AppConfig.DefaultString("mtwmCallbackURL2", ""), "") fromApi = mtwmapi.New(beego.AppConfig.DefaultString("mtwmAppID2", ""), beego.AppConfig.DefaultString("mtwmSecret2", ""), beego.AppConfig.DefaultString("mtwmCallbackURL2", ""), "")
@@ -210,7 +238,6 @@ func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isA
} }
case 2: case 2:
i := offSet i := offSet
errList := make([]*mtwmapi.AppFoodResult, 0, 0)
for { for {
// 同步商品 // 同步商品
fromFoodList, err1 := fromApi.RetailListAll(fromStore.VendorStoreID, i) fromFoodList, err1 := fromApi.RetailListAll(fromStore.VendorStoreID, i)
@@ -226,7 +253,6 @@ func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isA
globals.SugarLogger.Debugf("errListData %d:= %s", i, utils.Format4Output(errDataList, false)) globals.SugarLogger.Debugf("errListData %d:= %s", i, utils.Format4Output(errDataList, false))
errList = append(errList, errDataList...) errList = append(errList, errDataList...)
} }
globals.SugarLogger.Debugf("==============i: %d len: %d", i, len(fromFoodList))
if len(fromFoodList) < 100 { if len(fromFoodList) < 100 {
break break
} }
@@ -243,7 +269,12 @@ func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isA
} else { } else {
hint = task.ID hint = task.ID
} }
return hint, err
for _, v := range errList {
errData = append(errData, fmt.Errorf("food_id:%s,错误:%s", v.AppFoodCode, v.ErrorMsg))
}
return hint, errData, err
} }
// BatchInitSkuMT2MT 批量创建商品 // BatchInitSkuMT2MT 批量创建商品
@@ -340,3 +371,65 @@ func BatchInitSkuMT2MT(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi
return errList, nil return errList, nil
} }
//#endregion
//#region 同步活动
func CopyMtActToMt(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail) {
var fromApi *mtwmapi.API
var toApi *mtwmapi.API
var errData = make([]error, 0, 0)
if fromStore.VendorOrgCode == globals.Mtwm2Code {
fromApi = mtwmapi.New(beego.AppConfig.DefaultString("mtwmAppID2", ""), beego.AppConfig.DefaultString("mtwmSecret2", ""), beego.AppConfig.DefaultString("mtwmCallbackURL2", ""), "")
fromApi.SetToken(fromStore.MtwmToken)
} else {
fromApi = partner.CurAPIManager.GetAPI(model.VendorIDMTWM, fromStore.VendorOrgCode).(*mtwmapi.API)
}
if toStore.VendorOrgCode == globals.Mtwm2Code {
toApi = mtwmapi.New(beego.AppConfig.DefaultString("mtwmAppID2", ""), beego.AppConfig.DefaultString("mtwmSecret2", ""), beego.AppConfig.DefaultString("mtwmCallbackURL2", ""), "")
toApi.SetToken(toStore.MtwmToken)
} else {
toApi = partner.CurAPIManager.GetAPI(model.VendorIDMTWM, toStore.VendorOrgCode).(*mtwmapi.API)
}
// 买赠活动
buyGiftList, err := fromApi.BatchQueryBuyGiftsAll(fromStore.VendorStoreID)
if err != nil {
errData = append(errData, fmt.Errorf("买赠活动异常:%v", errData))
}
if len(buyGiftList) == model.NO {
errData = append(errData, fmt.Errorf("门店暂无买赠活动"))
}
param := make([]*mtwmapi.BatchCreateBuyGiftsParam, 0, 0)
for _, v := range buyGiftList {
buyGift := &mtwmapi.BatchCreateBuyGiftsParam{
AppSpuCode: v.AppSpuCode,
StartTime: v.StartTime,
EndTime: v.EndTime,
GiftsType: v.GiftsType,
GiftsName: v.GiftsName,
GiftsAppSpuCode: v.GiftsAppSpuCode,
BuyNum: v.BuyNum,
GiftsNum: v.GiftsNum,
GiftsCharge: v.GiftsCharge,
GiftsDayLimit: v.GiftsDayLimit,
}
// 赠品成本
giftsCharge := &mtwmapi.GiftsChargeObj{}
if err := json.Unmarshal([]byte(v.Charge), giftsCharge); err != nil {
return
}
buyGift.GiftsCharge = utils.Str2Float64(fmt.Sprintf("%.2f", utils.Str2Float64(giftsCharge.GiftsCharge)))
param = append(param, buyGift)
}
toApi.BatchCreateBuyGifts(toStore.VendorStoreID, param)
}
//#endregion

View File

@@ -1051,13 +1051,14 @@ func (c *StoreSkuController) CopyMtToJd() {
// @Param fromStoreID formData string true "被复制门店id" // @Param fromStoreID formData string true "被复制门店id"
// @Param toStoreID formData string true "复制到门店id" // @Param toStoreID formData string true "复制到门店id"
// @Param vendorID formData int true "平台id" // @Param vendorID formData int true "平台id"
// @Param offSet formData int true "跳过页码" // @Param offSet formData int false "跳过页码"
// @Param syncType formData int true "同步类型[1-商品/2-活动/3-前两者一起同步]"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult
// @router /CopyMtToMt [post] // @router /CopyMtToMt [post]
func (c *StoreSkuController) CopyMtToMt() { func (c *StoreSkuController) CopyMtToMt() {
c.callCopyMtToMt(func(params *tStoreSkuCopyMtToMtParams) (retVal interface{}, errCode string, err error) { c.callCopyMtToMt(func(params *tStoreSkuCopyMtToMtParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.CopyOnStoreSkuToOther(params.Ctx, params.FromStoreID, params.ToStoreID, params.VendorID, false, params.OffSet) retVal, err = cms.CopyOnStoreSkuToOther(params.Ctx, params.FromStoreID, params.ToStoreID, params.VendorID, false, params.OffSet, params.SyncType)
return retVal, errCode, err return retVal, errCode, err
}) })
} }

View File

@@ -28,6 +28,7 @@ func (c *Djsw2Controller) handleMsg(handler func(*jdapi.API, interface{}) *jdapi
func (c *Djsw2Controller) orderStatus() { func (c *Djsw2Controller) orderStatus() {
if c.Ctx.Input.Method() == http.MethodPost { if c.Ctx.Input.Method() == http.MethodPost {
callbackResponse := c.handleMsg(func(a *jdapi.API, obj interface{}) (callbackResponse *jdapi.CallbackResponse) { callbackResponse := c.handleMsg(func(a *jdapi.API, obj interface{}) (callbackResponse *jdapi.CallbackResponse) {
globals.SugarLogger.Debugf("========jds2 := %s", utils.Format4Output(obj, false))
if orderMsg, ok := obj.(*jdapi.CallbackOrderMsg); ok { if orderMsg, ok := obj.(*jdapi.CallbackOrderMsg); ok {
orderman.FixedOrderManager.OnNewFakeJdOrder(orderMsg.BillID) orderman.FixedOrderManager.OnNewFakeJdOrder(orderMsg.BillID)
} }
@@ -41,6 +42,7 @@ func (c *Djsw2Controller) orderStatus() {
} }
func (c *Djsw2Controller) NewOrder() { func (c *Djsw2Controller) NewOrder() {
globals.SugarLogger.Debugf("========jds2 := %s", "NewOrder")
c.orderStatus() c.orderStatus()
} }
@@ -49,18 +51,22 @@ func (c *Djsw2Controller) OrderAdjust() {
} }
func (c *Djsw2Controller) OrderWaitOutStore() { func (c *Djsw2Controller) OrderWaitOutStore() {
globals.SugarLogger.Debugf("========jds2 := %s", "OrderWaitOutStore")
c.nullOperation() c.nullOperation()
} }
func (c *Djsw2Controller) PickFinishOrder() { func (c *Djsw2Controller) PickFinishOrder() {
globals.SugarLogger.Debugf("========jds2 := %s", "PickFinishOrder")
c.nullOperation() c.nullOperation()
} }
func (c *Djsw2Controller) DeliveryOrder() { func (c *Djsw2Controller) DeliveryOrder() {
globals.SugarLogger.Debugf("========jds2 := %s", "DeliveryOrder")
c.nullOperation() c.nullOperation()
} }
func (c *Djsw2Controller) FinishOrder() { func (c *Djsw2Controller) FinishOrder() {
globals.SugarLogger.Debugf("========jds2 := %s", "FinishOrder")
c.nullOperation() c.nullOperation()
} }
@@ -73,6 +79,7 @@ func (c *Djsw2Controller) UnlockOrder() {
} }
func (c *Djsw2Controller) UserCancelOrder() { func (c *Djsw2Controller) UserCancelOrder() {
globals.SugarLogger.Debugf("========jds2 := %s", "UserCancelOrder")
c.nullOperation() c.nullOperation()
} }

View File

@@ -35,8 +35,10 @@ func (c *DjswController) handleMsg(handler func(*jdapi.API, interface{}) *jdapi.
} }
func (c *DjswController) orderStatus() { func (c *DjswController) orderStatus() {
globals.SugarLogger.Debugf("========jds := %s", "orderStatus")
if c.Ctx.Input.Method() == http.MethodPost { if c.Ctx.Input.Method() == http.MethodPost {
callbackResponse := c.handleMsg(func(a *jdapi.API, obj interface{}) (callbackResponse *jdapi.CallbackResponse) { callbackResponse := c.handleMsg(func(a *jdapi.API, obj interface{}) (callbackResponse *jdapi.CallbackResponse) {
globals.SugarLogger.Debugf("========obj := %s", utils.Format4Output(obj, false))
callbackResponse = jd.OnOrderMsg(obj.(*jdapi.CallbackOrderMsg), a) callbackResponse = jd.OnOrderMsg(obj.(*jdapi.CallbackOrderMsg), a)
return callbackResponse return callbackResponse
}) })
@@ -48,30 +50,37 @@ func (c *DjswController) orderStatus() {
} }
func (c *DjswController) NewOrder() { func (c *DjswController) NewOrder() {
globals.SugarLogger.Debugf("========jds := %s", "NewOrder")
c.orderStatus() c.orderStatus()
} }
func (c *DjswController) OrderAdjust() { func (c *DjswController) OrderAdjust() {
globals.SugarLogger.Debugf("========jds := %s", "OrderAdjust")
c.orderStatus() c.orderStatus()
} }
func (c *DjswController) OrderWaitOutStore() { func (c *DjswController) OrderWaitOutStore() {
globals.SugarLogger.Debugf("========jds := %s", "OrderWaitOutStore")
c.orderStatus() c.orderStatus()
} }
func (c *DjswController) PickFinishOrder() { func (c *DjswController) PickFinishOrder() {
globals.SugarLogger.Debugf("========jds := %s", "PickFinishOrder")
c.orderStatus() c.orderStatus()
} }
func (c *DjswController) DeliveryOrder() { func (c *DjswController) DeliveryOrder() {
globals.SugarLogger.Debugf("========jds := %s", "DeliveryOrder")
c.orderStatus() c.orderStatus()
} }
func (c *DjswController) FinishOrder() { func (c *DjswController) FinishOrder() {
globals.SugarLogger.Debugf("========jds := %s", "FinishOrder")
c.orderStatus() c.orderStatus()
} }
func (c *DjswController) LockOrder() { func (c *DjswController) LockOrder() {
globals.SugarLogger.Debugf("========jds := %s", "LockOrder")
c.orderStatus() c.orderStatus()
} }
@@ -80,6 +89,7 @@ func (c *DjswController) UnlockOrder() {
} }
func (c *DjswController) UserCancelOrder() { func (c *DjswController) UserCancelOrder() {
globals.SugarLogger.Debugf("========jds := %s", "UserCancelOrder")
c.orderStatus() c.orderStatus()
} }