+ OpenRemoteStoreByJxStatus

This commit is contained in:
gazebo
2019-07-19 14:27:48 +08:00
parent 1096613dd5
commit 7f94f15dca
6 changed files with 154 additions and 68 deletions

View File

@@ -0,0 +1,57 @@
package cms
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner"
)
// 如果京西门为打开,打开状态为非营业的平台门店
func OpenRemoteStoreByJxStatus(ctx *jxcontext.Context, vendorIDs, storeIDs []int, isForce, isAsync, isContinueWhenError bool) (hint string, err error) {
db := dao.GetDB()
status := model.StoreStatusAll
if !isForce {
status = model.StoreStatusClosed
}
storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, status, model.StoreIsSyncYes, "")
if err != nil {
return "", err
}
vendorIDMap := make(map[int]int)
if len(vendorIDs) == 0 {
for k := range partner.PurchasePlatformHandlers {
vendorIDMap[k] = 1
}
} else {
for _, v := range vendorIDs {
vendorIDMap[v] = 1
}
}
task := tasksch.NewParallelTask("OpenRemoteStoreByJxStatus", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeMap := batchItemList[0].(*model.StoreMap)
if handler, _ := partner.GetPurchasePlatformFromVendorID(storeMap.VendorID).(partner.IStoreHandler); handler != nil {
storeDetail, err := dao.GetStoreDetail(db, storeMap.StoreID, storeMap.VendorID)
if err == nil && storeDetail.Status == model.StoreStatusOpened {
if err = handler.UpdateStoreStatus(ctx, storeMap.StoreID, storeMap.VendorStoreID, model.StoreStatusOpened); err == nil {
retVal = []int{0}
}
}
}
return retVal, err
}, storeMapList)
tasksch.HandleTask(task, nil, true).Run()
if isAsync {
hint = task.GetID()
} else {
resultList, err2 := task.GetResult(0)
if err = err2; err == nil {
hint = utils.Int2Str(len(resultList))
}
}
return hint, err
}

View File

@@ -0,0 +1,9 @@
package partner
import "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
type IStoreHandler interface {
UpdateStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, status int) (err error)
// opTime格式为整数1130代表11:30
// ChangeStoreOptime(ctx *jxcontext.Context, opTimeList []int) (err error)
}

View File

@@ -181,27 +181,7 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
}
if err == nil {
mergeStatus := jxutils.MergeStoreStatus(store.Status, store.EbaiStoreStatus)
if !isStoreStatusSame(store2.Status, mergeStatus) {
if mergeStatus == model.StoreStatusOpened {
err = api.EbaiAPI.ShopOpen("", utils.Str2Int64(store.VendorStoreID))
} else if mergeStatus == model.StoreStatusHaveRest || mergeStatus == model.StoreStatusClosed {
err = api.EbaiAPI.ShopClose("", utils.Str2Int64(store.VendorStoreID))
} else if mergeStatus == model.StoreStatusDisabled {
err = api.EbaiAPI.ShopOffline("", utils.Str2Int64(store.VendorStoreID))
}
if intErr, ok := err.(*utils.ErrorWithCode); ok && intErr.IntCode() == 201100 {
err = nil
}
}
if err != nil {
// todo
if intErr, ok := err.(*utils.ErrorWithCode); ok {
if intErr.IntCode() == 201101 {
err = nil
}
}
}
if err != nil {
if err = p.updateStoreStatus(userName, storeID, store.VendorStoreID, mergeStatus, store2.Status); err != nil {
return err
}
params := genStoreMapFromStore(store)
@@ -441,3 +421,29 @@ func (c *PurchaseHandler) GetShopHealthInfo(vendorShopID string) (shopHealthInfo
}
return shopHealthInfo, err
}
func (c *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, status int) (err error) {
store, err := c.ReadStore(vendorStoreID)
if err != nil {
return err
}
return c.updateStoreStatus(ctx.GetUserName(), storeID, vendorStoreID, status, store.Status)
}
func (c *PurchaseHandler) updateStoreStatus(userName string, storeID int, vendorStoreID string, status, currentStatus int) (err error) {
if !isStoreStatusSame(currentStatus, status) {
if globals.EnableEbaiStoreWrite {
if status == model.StoreStatusOpened {
err = api.EbaiAPI.ShopOpen("", utils.Str2Int64(vendorStoreID))
} else if status == model.StoreStatusHaveRest || status == model.StoreStatusClosed {
err = api.EbaiAPI.ShopClose("", utils.Str2Int64(vendorStoreID))
} else if status == model.StoreStatusDisabled {
err = api.EbaiAPI.ShopOffline("", utils.Str2Int64(vendorStoreID))
}
}
if intErr, ok := err.(*utils.ErrorWithCode); ok && intErr.IntCode() == 201100 {
err = nil
}
}
return err
}

View File

@@ -318,3 +318,13 @@ func (c *PurchaseHandler) OnStoreMsg(msg *jdapi.CallbackOrderMsg) (response *jda
// }
return jdapi.Err2CallbackResponse(err, "")
}
func (c *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, status int) (err error) {
_, closeStatus := JxStoreStatus2JdStatus(status)
if globals.EnableJdStoreWrite {
err = api.JdAPI.UpdateStoreInfo4Open(vendorStoreID, ctx.GetUserName(), map[string]interface{}{
"closeStatus": closeStatus,
})
}
return err
}

View File

@@ -107,7 +107,6 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
if storeDetail.OpenTime2 > 0 {
openTime = append(openTime, [2]int16{storeDetail.OpenTime2, storeDetail.CloseTime2})
}
openLevel, isOnline := bizStatusJX2Mtwm(jxutils.MergeStoreStatus(storeDetail.Status, storeDetail.VendorStatus))
// remoteStoreInfo, err := api.MtwmAPI.PoiGet(storeDetail.VendorStoreID)
// if err != nil {
// return err
@@ -130,29 +129,9 @@ func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName strin
// if globals.EnableMtwmStoreWrite {
// err = api.MtwmAPI.PoiSave(storeDetail.VendorStoreID, params)
// }
if globals.EnableMtwmStoreWrite {
if isOnline != mtwmapi.PoiStatusOnline {
err = api.MtwmAPI.PoiOffline(storeDetail.VendorStoreID)
} else {
if err = api.MtwmAPI.PoiOnline(storeDetail.VendorStoreID); err == nil {
// 这个函数成功返回也并不表示上线成功。。。
remoteStoreInfo, err2 := api.MtwmAPI.PoiGet(storeDetail.VendorStoreID)
if err = err2; err != nil {
return err
}
if remoteStoreInfo.IsOnline == mtwmapi.PoiStatusOnline {
if openLevel == mtwmapi.PoiOpenLevelHaveRest {
err = api.MtwmAPI.PoiClose(storeDetail.VendorStoreID)
} else {
err = api.MtwmAPI.PoiOpen(storeDetail.VendorStoreID)
}
if err == nil {
err = api.MtwmAPI.PoiShipTimeUpdate(storeDetail.VendorStoreID, openTimeJX2Mtwm(openTime))
}
} else {
err = errors.New("门店还未上线,不能修改营业状态")
}
}
if err = p.UpdateStoreStatus(jxcontext.AdminCtx, storeID, storeDetail.VendorStoreID, jxutils.MergeStoreStatus(storeDetail.Status, storeDetail.VendorStatus)); err == nil {
if globals.EnableMtwmStoreWrite {
err = api.MtwmAPI.PoiShipTimeUpdate(storeDetail.VendorStoreID, openTimeJX2Mtwm(openTime))
}
}
return err
@@ -190,3 +169,29 @@ func (p *PurchaseHandler) GetStoreStatus(ctx *jxcontext.Context, vendorStoreID s
}
return 0, err
}
func (c *PurchaseHandler) UpdateStoreStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, status int) (err error) {
openLevel, isOnline := bizStatusJX2Mtwm(status)
if globals.EnableMtwmStoreWrite {
if isOnline != mtwmapi.PoiStatusOnline {
err = api.MtwmAPI.PoiOffline(vendorStoreID)
} else {
if err = api.MtwmAPI.PoiOnline(vendorStoreID); err == nil { // 这个函数成功返回也并不表示上线成功。。。
remoteStoreInfo, err2 := api.MtwmAPI.PoiGet(vendorStoreID)
if err = err2; err != nil {
return err
}
if remoteStoreInfo.IsOnline == mtwmapi.PoiStatusOnline {
if openLevel == mtwmapi.PoiOpenLevelHaveRest {
err = api.MtwmAPI.PoiClose(vendorStoreID)
} else {
err = api.MtwmAPI.PoiOpen(vendorStoreID)
}
} else {
err = errors.New("门店还未上线,不能修改营业状态")
}
}
}
}
return err
}

View File

@@ -1,11 +1,9 @@
package controllers
import (
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxstore/tempop"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/globals/api"
"github.com/astaxie/beego"
)
@@ -242,26 +240,27 @@ func (c *TempOpController) RefreshMtpsWaybillFee() {
// @router /TestIt [get]
func (c *TempOpController) TestIt() {
c.callTestIt(func(params *tTempopTestItParams) (retVal interface{}, errCode string, err error) {
shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll)
task := tasksch.NewParallelTask("tttt", nil, params.Ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
shop := batchItemList[0].(*ebaiapi.ShopInfo)
skuInfo, err := api.EbaiAPI.SkuList(shop.ShopID, &ebaiapi.SkuListParams{})
if err == nil && skuInfo.Total > 500 {
errSkuCount := 0
for _, sku := range skuInfo.List {
if sku.CustomCatIDs == "" {
errSkuCount++
}
}
if errSkuCount > len(skuInfo.List)/3 {
retVal = []string{shop.ShopID}
}
}
return retVal, err
}, shopList)
task.Run()
retVal, err = task.GetResult(0)
retVal, err = cms.OpenRemoteStoreByJxStatus(params.Ctx, nil, nil, false, true, true)
// shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll)
// task := tasksch.NewParallelTask("tttt", nil, params.Ctx,
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// shop := batchItemList[0].(*ebaiapi.ShopInfo)
// skuInfo, err := api.EbaiAPI.SkuList(shop.ShopID, &ebaiapi.SkuListParams{})
// if err == nil && skuInfo.Total > 500 {
// errSkuCount := 0
// for _, sku := range skuInfo.List {
// if sku.CustomCatIDs == "" {
// errSkuCount++
// }
// }
// if errSkuCount > len(skuInfo.List)/3 {
// retVal = []string{shop.ShopID}
// }
// }
// return retVal, err
// }, shopList)
// task.Run()
// retVal, err = task.GetResult(0)
return retVal, "", err
})
}