diff --git a/business/jxstore/cms/system_store_sku.go b/business/jxstore/cms/system_store_sku.go index f7b5fecd4..737c9896a 100644 --- a/business/jxstore/cms/system_store_sku.go +++ b/business/jxstore/cms/system_store_sku.go @@ -1,6 +1,7 @@ package cms import ( + "encoding/json" "fmt" "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" @@ -17,37 +18,59 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" ) +const ( + SyncTypeSku = 1 + SyncTypeAct = 2 + SyncTypeAll = 3 +) + // 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 ( - db = dao.GetDB() + db = dao.GetDB() + copySkuErr = make([]error, 0, 0) + err error ) // 门店api加载 toStore, err := dao.GetStoreDetailByVendorStoreID(db, toStoreId, vendorId, "") if err != nil { - return "", err + return nil, err } fromStore, err := dao.GetStoreDetailByVendorStoreID(db, fromStoreId, vendorId, "") if err != nil { - return "", err + return nil, err } - switch vendorId { - case model.VendorIDMTWM: - return CopyMtToMT(ctx, fromStore, toStore, isAsync, offSet) - case model.VendorIDEBAI: - return CopyEBaiToEBai(ctx, fromStore, toStore, isAsync, offSet) - default: - return "", fmt.Errorf("暂时还不支持") + if syncType == SyncTypeSku || syncType == SyncTypeAll { + switch vendorId { + case model.VendorIDMTWM: + _, copySkuErr, err = CopyMtToMT(ctx, fromStore, toStore, isAsync, offSet) + case model.VendorIDEBAI: + _, copySkuErr, err = CopyEBaiToEBai(ctx, fromStore, toStore, isAsync, offSet) + default: + return nil, fmt.Errorf("暂时还不支持") + } } + + if syncType == SyncTypeAct || syncType == SyncTypeAll { + if vendorId == model.VendorIDMTWM { + + } + } + + return copySkuErr, err } +//#region 同步商品 + // 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{} + var errListData = make([]error, 0, 0) api := api.EbaiAPI + taskName := fmt.Sprintf("将饿了么平台门店[%s],分类和商品复制到[%s]", fromStore.VendorStoreID, toStore.VendorStoreID) config := tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(false) 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 { 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 { - globals.SugarLogger.Debugf("BatchInitData : %s", utils.Format4Output(err, false)) + errList := BatchInitSkuEBai2EBai(ctx, fromFoodList.List, api, utils.Int2Str(toStore.ID), VendorCategoryIDMap) + if errList != nil { + errListData = append(errListData, errList...) + globals.SugarLogger.Debugf("BatchInitData : %s", utils.Format4Output(errList, false)) } i = i + 1 } @@ -111,11 +136,12 @@ func CopyEBaiToEBai(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, } else { hint = task.ID } - return hint, err + return hint, errList, err } // 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 { params := map[string]interface{}{ "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) if err != nil { - globals.SugarLogger.Debugf("错误商品id: %d,商品名称:%s, %v", storeSku.SkuId, storeSku.Name, err) + errList = append(errList, err) } } - return nil + return errList } // 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 toApi *mtwmapi.API + var errList = make([]*mtwmapi.AppFoodResult, 0, 0) + 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", ""), "") @@ -210,7 +238,6 @@ func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isA } case 2: i := offSet - errList := make([]*mtwmapi.AppFoodResult, 0, 0) for { // 同步商品 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)) errList = append(errList, errDataList...) } - globals.SugarLogger.Debugf("==============i: %d len: %d", i, len(fromFoodList)) if len(fromFoodList) < 100 { break } @@ -243,7 +269,12 @@ func CopyMtToMT(ctx *jxcontext.Context, fromStore, toStore *dao.StoreDetail, isA } else { 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 批量创建商品 @@ -340,3 +371,65 @@ func BatchInitSkuMT2MT(ctx *jxcontext.Context, fromSku []*mtwmapi.AppFood, toApi 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 diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 2759aef21..362757e9a 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -1051,13 +1051,14 @@ func (c *StoreSkuController) CopyMtToJd() { // @Param fromStoreID formData string true "被复制门店id" // @Param toStoreID formData string 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 // @Failure 200 {object} controllers.CallResult // @router /CopyMtToMt [post] func (c *StoreSkuController) CopyMtToMt() { 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 }) } diff --git a/controllers/jd2_callback.go b/controllers/jd2_callback.go index c178cb5ba..2476bf391 100644 --- a/controllers/jd2_callback.go +++ b/controllers/jd2_callback.go @@ -28,6 +28,7 @@ func (c *Djsw2Controller) handleMsg(handler func(*jdapi.API, interface{}) *jdapi func (c *Djsw2Controller) orderStatus() { if c.Ctx.Input.Method() == http.MethodPost { 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 { orderman.FixedOrderManager.OnNewFakeJdOrder(orderMsg.BillID) } @@ -41,6 +42,7 @@ func (c *Djsw2Controller) orderStatus() { } func (c *Djsw2Controller) NewOrder() { + globals.SugarLogger.Debugf("========jds2 := %s", "NewOrder") c.orderStatus() } @@ -49,18 +51,22 @@ func (c *Djsw2Controller) OrderAdjust() { } func (c *Djsw2Controller) OrderWaitOutStore() { + globals.SugarLogger.Debugf("========jds2 := %s", "OrderWaitOutStore") c.nullOperation() } func (c *Djsw2Controller) PickFinishOrder() { + globals.SugarLogger.Debugf("========jds2 := %s", "PickFinishOrder") c.nullOperation() } func (c *Djsw2Controller) DeliveryOrder() { + globals.SugarLogger.Debugf("========jds2 := %s", "DeliveryOrder") c.nullOperation() } func (c *Djsw2Controller) FinishOrder() { + globals.SugarLogger.Debugf("========jds2 := %s", "FinishOrder") c.nullOperation() } @@ -73,6 +79,7 @@ func (c *Djsw2Controller) UnlockOrder() { } func (c *Djsw2Controller) UserCancelOrder() { + globals.SugarLogger.Debugf("========jds2 := %s", "UserCancelOrder") c.nullOperation() } diff --git a/controllers/jd_callback.go b/controllers/jd_callback.go index ef9115db9..15889e9f9 100644 --- a/controllers/jd_callback.go +++ b/controllers/jd_callback.go @@ -35,8 +35,10 @@ func (c *DjswController) handleMsg(handler func(*jdapi.API, interface{}) *jdapi. } func (c *DjswController) orderStatus() { + globals.SugarLogger.Debugf("========jds := %s", "orderStatus") if c.Ctx.Input.Method() == http.MethodPost { 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) return callbackResponse }) @@ -48,30 +50,37 @@ func (c *DjswController) orderStatus() { } func (c *DjswController) NewOrder() { + globals.SugarLogger.Debugf("========jds := %s", "NewOrder") c.orderStatus() } func (c *DjswController) OrderAdjust() { + globals.SugarLogger.Debugf("========jds := %s", "OrderAdjust") c.orderStatus() } func (c *DjswController) OrderWaitOutStore() { + globals.SugarLogger.Debugf("========jds := %s", "OrderWaitOutStore") c.orderStatus() } func (c *DjswController) PickFinishOrder() { + globals.SugarLogger.Debugf("========jds := %s", "PickFinishOrder") c.orderStatus() } func (c *DjswController) DeliveryOrder() { + globals.SugarLogger.Debugf("========jds := %s", "DeliveryOrder") c.orderStatus() } func (c *DjswController) FinishOrder() { + globals.SugarLogger.Debugf("========jds := %s", "FinishOrder") c.orderStatus() } func (c *DjswController) LockOrder() { + globals.SugarLogger.Debugf("========jds := %s", "LockOrder") c.orderStatus() } @@ -80,6 +89,7 @@ func (c *DjswController) UnlockOrder() { } func (c *DjswController) UserCancelOrder() { + globals.SugarLogger.Debugf("========jds := %s", "UserCancelOrder") c.orderStatus() }