- sync store category.

This commit is contained in:
gazebo
2018-10-08 15:33:13 +08:00
parent 465f1f0431
commit 922e5175c7
11 changed files with 252 additions and 109 deletions

View File

@@ -6,7 +6,8 @@ import (
)
var (
defTaskMan TaskMan
defTaskMan TaskMan
defLastHours = 24
)
type TaskMan struct {
@@ -24,6 +25,9 @@ func (m *TaskMan) RunTask(taskName string, isContinueWhenError bool, resultHandl
}
func (m *TaskMan) GetTasks(taskID string, fromStatus, toStatus int, lastHours int) (taskList []*Task) {
if lastHours == 0 {
lastHours = defLastHours
}
lastTime := time.Now().Add(time.Duration(-lastHours) * time.Hour).Unix()
for k, v := range m.taskList {
if !((taskID != "" && taskID != k) || v.Status < fromStatus || v.Status > toStatus || v.CreatedAt.Unix() < lastTime) {

View File

@@ -7,7 +7,6 @@ import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
)
@@ -51,9 +50,9 @@ func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, c
qs = qs.Filter(k, v)
}
}
globals.SugarLogger.Debugf("UpdateEntityByKV befor item:%s, kvs:%s, conditions:%s", utils.Format4Output(item, false), utils.Format4Output(kvs, false), utils.Format4Output(conditions, false))
// globals.SugarLogger.Debugf("UpdateEntityByKV befor item:%s, kvs:%s, conditions:%s", utils.Format4Output(item, false), utils.Format4Output(kvs, false), utils.Format4Output(conditions, false))
num, err = qs.Update(kvs)
globals.SugarLogger.Debugf("UpdateEntityByKV after update, num:%d", num)
// globals.SugarLogger.Debugf("UpdateEntityByKV after update, num:%d", num)
return err
}, reflect.TypeOf(item).Name())
return num, err
@@ -71,7 +70,7 @@ func UpdateEntityLogically(db *DaoDB, item interface{}, kvs map[string]interface
}), conditions)
}
// 函数会更新同步标志
// 函数会更新同步标志
func UpdateEntityLogicallyAndUpdateSyncStatus(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}, syncStatusFieldName string) (num int64, err error) {
if conditions != nil {
conditions = utils.MergeMaps(conditions, map[string]interface{}{

View File

@@ -73,7 +73,7 @@ type IPurchasePlatformHandler interface {
// OpenStore(vendorStoreID string, userName string) error
// CloseStore(vendorStoreID, closeNotice, userName string) error
SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error)
SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isSync bool, userName string) (err error)
GetFieldIDName() string
GetFieldSyncStatusName() string

View File

@@ -9,13 +9,13 @@ import (
)
const (
testShopBaiduID = 2233043816
testShopID = "test_708706_63032"
testShopBaiduID = 2233909607
testShopID = "100077"
)
func init() {
beego.InitBeegoBeforeTest("/Users/xujianhua/go/src/git.rosy.net.cn/jx-callback/conf/app.conf")
// beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test
beego.BConfig.RunMode = "dev" // InitBeegoBeforeTest会将runmode设置为test
globals.Init()
beegodb.Init()

View File

@@ -71,9 +71,9 @@ var (
}
)
func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) {
func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isSync bool, userName string) (err error) {
for _, storeID := range storeIDs {
err = p.syncOneStoreSkus(db, storeID, skuIDs, isForce, userName)
err = p.syncOneStoreSkus(db, storeID, skuIDs, isSync, userName)
if err != nil {
break
}
@@ -81,13 +81,14 @@ func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []
return err
}
func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int, isForce bool, userName string) (err error) {
func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int, isSync bool, userName string) (err error) {
globals.SugarLogger.Debugf("syncOneStoreSkus storeID:%d, skuIDs:%v, userName:%s", storeID, skuIDs, userName)
if err = p.syncOneStoreCategoriesFromRemote2Local(db, storeID, userName); err != nil {
return err
}
sql := `
doThing := func() (err error) {
if err = p.syncOneStoreCategoriesFromRemote2Local(db, storeID, userName); err != nil {
return err
}
sql := `
SELECT t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status,
t3.prefix, t3.name, t3.comment, t3.is_global, t3.unit, t3.img,
t4.name cat_name,
@@ -107,82 +108,86 @@ func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []
WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0)
`
sqlParams := []interface{}{
model.VendorIDEBAI,
model.VendorIDEBAI,
storeID,
}
if skuIDs != nil && len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
strStoreID := utils.Int2Str(storeID)
var storeSkuInfoList []*tStoreSkuFullInfo
if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil {
// globals.SugarLogger.Debug(utils.Format4Output(storeSkuInfoList, false))
catList2Add := make(map[int]int)
for _, storeSku := range storeSkuInfoList {
if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
if storeSku.ParentCatEbaiID == 0 {
catList2Add[storeSku.ParentCatID] = 1
}
if storeSku.CatEbaiID == 0 {
catList2Add[storeSku.CatID] = 1
sqlParams := []interface{}{
model.VendorIDEBAI,
model.VendorIDEBAI,
storeID,
}
if skuIDs != nil && len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
strStoreID := utils.Int2Str(storeID)
var storeSkuInfoList []*tStoreSkuFullInfo
if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil {
// globals.SugarLogger.Debug(utils.Format4Output(storeSkuInfoList, false))
catList2Add := make(map[int]int)
for _, storeSku := range storeSkuInfoList {
if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
if storeSku.ParentCatEbaiID == 0 {
catList2Add[storeSku.ParentCatID] = 1
}
if storeSku.CatEbaiID == 0 {
catList2Add[storeSku.CatID] = 1
}
}
}
}
for k := range catList2Add {
if err = dao.AddStoreCategoryMap(db, storeID, k, model.VendorIDEBAI, "", model.SyncFlagNewMask, userName); err != nil {
for k := range catList2Add {
if err = dao.AddStoreCategoryMap(db, storeID, k, model.VendorIDEBAI, "", model.SyncFlagNewMask, userName); err != nil {
return err
}
}
if err = p.SyncOneStoreCategories(db, storeID, userName); err != nil {
return err
}
}
if err = p.syncOneStoreCategoriesFromLocal2Remote(db, storeID, userName); err != nil {
return err
}
if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil {
task := tasksch.RunTask("syncOneStoreSkus skus", false, nil, 0, 1, userName, func(batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeSku := batchItemList[0].(*tStoreSkuFullInfo)
updateFields := []string{model.FieldEbaiSyncStatus}
if storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 {
err = api.EbaiAPI.SkuDelete(strStoreID, utils.Int64ToStr(storeSku.EbaiID))
} else if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
// globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false))
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
// todo 创建SKU后马上绑定分类会失败待解决
updateFields = append(updateFields, model.FieldEbaiID)
if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil {
task := tasksch.RunManagedTask("syncOneStoreSkus skus", false, nil, 0, 1, userName, func(batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeSku := batchItemList[0].(*tStoreSkuFullInfo)
updateFields := []string{model.FieldEbaiSyncStatus}
if storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 {
err = api.EbaiAPI.SkuDelete(strStoreID, utils.Int64ToStr(storeSku.EbaiID))
} else if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
// globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false))
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
// todo 创建SKU后马上绑定分类会失败待解决
updateFields = append(updateFields, model.FieldEbaiID)
time.AfterFunc(3*time.Second, func() {
api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID))
})
}
} else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 {
if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
err = api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID))
}
}
} else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 {
_, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku))
}
if storeSku.EbaiSyncStatus&(model.SyncFlagNewMask|model.SyncFlagModifiedMask) != 0 {
time.AfterFunc(3*time.Second, func() {
api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID))
})
}
if err == nil {
storeSku.EbaiSyncStatus = 0
_, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...)
}
return nil, err
}, storeSkuInfoList)
_, err = task.GetResult(0)
if err == nil {
storeSku.EbaiSyncStatus = 0
_, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...)
}
return nil, err
}, storeSkuInfoList)
_, err = task.GetResult(0)
}
}
return err
}
if isSync {
err = doThing()
} else {
go doThing()
}
return err
}
func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, catIDs []int) (err error) {
// sql := `
// SELECT t1.*, t2.spec_quality, t2.spec_unit, t2.weight,
// t3.prefix, t3.name, t3.comment, t3.is_global, t3.unit, t3.img,
// t4.ebai_category_id, t4.name cat_name, t5.ebai_id cat_id, t5.ebai_category_id
// FROM store_sku_bind t1
// JOIN sku t2 ON t1.sku_id = t2.skuIDs
// JOIN sku_name t3 ON t2.name_id = t3.id
// JOIN sku_category t4 ON t3.category_id = t4.id
// LEFT JOIN store_sku_category_map t5 ON t5.store_id = t1.store_id AND t5.category_id = t4.id
// WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0
// `
func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
globals.SugarLogger.Debugf("SyncStoreCategories storeIDs:%d, userName:%s", storeIDs, userName)
for _, storeID := range storeIDs {
if err = p.SyncOneStoreCategories(db, storeID, userName); err != nil {
break
}
}
return err
}
@@ -301,6 +306,10 @@ func getEbaiCat(catID int64, level int) int64 {
}
// 从饿百同步分类信息到本地
// 些函数执行后:
// 远程有与本地有的条目会关联(并置标记,下次同步会刷新远程)
// 远程没有本地有的条目会标记新增
// 远程有本地没有的条目不做处理
func (p *PurchaseHandler) syncOneStoreCategoriesFromRemote2Local(db *dao.DaoDB, storeID int, userName string) (err error) {
globals.SugarLogger.Debugf("syncOneStoreCategoriesFromRemote2Local storeID:%d, userName:%s", storeID, userName)
@@ -316,6 +325,7 @@ func (p *PurchaseHandler) syncOneStoreCategoriesFromRemote2Local(db *dao.DaoDB,
cat1Map := map[string]*tStoreCatInfo{}
for _, v := range catList {
v.Name = utils.FilterMb4(v.Name)
globals.SugarLogger.Debug(v.Name)
if v.Level == 1 {
cat1 := cat1Map[v.Name]
if cat1 == nil {
@@ -330,27 +340,19 @@ func (p *PurchaseHandler) syncOneStoreCategoriesFromRemote2Local(db *dao.DaoDB,
}
cat1.Children[v.Name] = v
}
v.EbaiSyncStatus |= model.SyncFlagNewMask
}
if result, err := api.EbaiAPI.ShopCategoryGet(utils.Int2Str(storeID)); err == nil {
for _, v := range result {
jxCat := cat1Map[v.Name]
if jxCat == nil { // 远程有,本地没有,非法类别
} else {
if jxCat.EbaiID != v.CategoryID || utils.Int2Str(jxCat.CatID) != v.ShopCustomID {
if jxCat.ID == 0 { // 远程有,本门店没有
globals.SugarLogger.Debug(jxCat.CatID)
err = dao.AddStoreCategoryMap(db, storeID, jxCat.CatID, model.VendorIDEBAI, utils.Int64ToStr(v.CategoryID), model.SyncFlagModifiedMask, userName)
} else { // 远程有本门店有但ID信息不一致
err = dao.AddStoreCategoryMap(db, storeID, jxCat.CatID, model.VendorIDEBAI, utils.Int64ToStr(v.CategoryID), model.SyncFlagModifiedMask, userName)
}
} else { // 两边都有,且信息一致
}
}
if err != nil {
return err
}
dao.Begin(db)
defer func() {
dao.Rollback(db)
}()
// globals.SugarLogger.Debug(utils.Format4Output(cat1Map, false))
if err = p.processLocalCatByRemote(db, storeID, cat1Map, result, userName); err == nil {
err = p.updateLocalCatAsNew(db, cat1Map, userName)
}
if err == nil {
dao.Commit(db)
}
}
}
@@ -359,8 +361,8 @@ func (p *PurchaseHandler) syncOneStoreCategoriesFromRemote2Local(db *dao.DaoDB,
// 从本地同步分类信息到饿百
// 测试过程中出现过,父分类创建成功后马上创建子分类会报没有父分类错
func (p *PurchaseHandler) syncOneStoreCategoriesFromLocal2Remote(db *dao.DaoDB, storeID int, userName string) (err error) {
globals.SugarLogger.Debugf("syncOneStoreCategoriesFromLocal2Remote storeID:%d, userName:%s", storeID, userName)
func (p *PurchaseHandler) SyncOneStoreCategories(db *dao.DaoDB, storeID int, userName string) (err error) {
globals.SugarLogger.Debugf("SyncOneStoreCategories storeID:%d, userName:%s", storeID, userName)
for level := 1; level <= 2; level++ {
sql := `
@@ -387,13 +389,13 @@ func (p *PurchaseHandler) syncOneStoreCategoriesFromLocal2Remote(db *dao.DaoDB,
if catInfo.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
err = api.EbaiAPI.ShopCategoryDelete(strStoreID, catInfo.EbaiID)
} else if catInfo.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // 新增
ebaiID, err2 := api.EbaiAPI.ShopCategoryCreate(strStoreID, catInfo.ParentEbaiID, utils.FilterMb4(catInfo.Name), int(catInfo.Seq+1), utils.Int2Str(catInfo.ID))
ebaiID, err2 := api.EbaiAPI.ShopCategoryCreate(strStoreID, catInfo.ParentEbaiID, utils.FilterMb4(catInfo.Name), int(catInfo.Seq+1), utils.Int2Str(catInfo.CategoryID))
if err = err2; err == nil {
catInfo.EbaiID = ebaiID
updateFields = append(updateFields, model.FieldEbaiID)
}
} else if catInfo.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, utils.FilterMb4(catInfo.Name), int(catInfo.Seq+1), utils.Int2Str(catInfo.ID))
err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, utils.FilterMb4(catInfo.Name), int(catInfo.Seq+1), utils.Int2Str(catInfo.CategoryID))
}
if err == nil {
catInfo.EbaiSyncStatus = 0
@@ -406,3 +408,54 @@ func (p *PurchaseHandler) syncOneStoreCategoriesFromLocal2Remote(db *dao.DaoDB,
}
return err
}
func (p *PurchaseHandler) processLocalCatByRemote(db *dao.DaoDB, storeID int, localCatMap map[string]*tStoreCatInfo, remoteCatList []*ebaiapi.CategoryInfo, userName string) (err error) {
if localCatMap == nil || remoteCatList == nil {
return nil
}
for _, v := range remoteCatList {
jxCat := localCatMap[v.Name]
if jxCat == nil { // 远程有,本地没有,非法类别
globals.SugarLogger.Debug(v.Name)
globals.SugarLogger.Debug(utils.Format4Output(localCatMap, false))
} else {
if jxCat.EbaiID != v.CategoryID || utils.Int2Str(jxCat.CatID) != v.ShopCustomID {
if jxCat.ID == 0 { // 远程有,本门店没有
globals.SugarLogger.Debug(jxCat.CatID)
err = dao.AddStoreCategoryMap(db, storeID, jxCat.CatID, model.VendorIDEBAI, utils.Int64ToStr(v.CategoryID), model.SyncFlagModifiedMask, userName)
} else { // 远程有本门店有但ID信息不一致
_, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, &jxCat.StoreSkuCategoryMap, map[string]interface{}{
model.FieldEbaiID: v.CategoryID,
}, userName, nil, model.FieldEbaiSyncStatus)
}
} else { // 两边都有,且信息一致
}
jxCat.EbaiSyncStatus = 0
if err = p.processLocalCatByRemote(db, storeID, jxCat.Children, v.Children, userName); err != nil {
return err
}
}
if err != nil {
return err
}
}
return nil
}
func (p *PurchaseHandler) updateLocalCatAsNew(db *dao.DaoDB, localCatMap map[string]*tStoreCatInfo, userName string) (err error) {
if localCatMap == nil {
return nil
}
for _, v := range localCatMap {
if v.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
dao.WrapUpdateULEntity(&v.StoreSkuCategoryMap, userName)
if _, err = dao.UpdateEntity(db, &v.StoreSkuCategoryMap); err != nil {
return err
}
}
if err = p.updateLocalCatAsNew(db, v.Children, userName); err != nil {
return err
}
}
return nil
}

View File

@@ -2,6 +2,7 @@ package ebai
import (
"testing"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model/dao"
@@ -13,6 +14,7 @@ func TestSyncStoreSkus(t *testing.T) {
if err != nil {
t.Fatal(err.Error())
}
time.Sleep(5 * time.Second)
}
func TestSyncOneStoreCategoriesFromRemote2Local(t *testing.T) {
@@ -25,7 +27,7 @@ func TestSyncOneStoreCategoriesFromRemote2Local(t *testing.T) {
func TestSyncOneStoreCategoriesFromLocal2Remote(t *testing.T) {
db := dao.GetDB()
err := new(PurchaseHandler).syncOneStoreCategoriesFromLocal2Remote(db, 100077, "autotest")
err := new(PurchaseHandler).SyncOneStoreCategories(db, 100077, "autotest")
if err != nil {
t.Fatal(err.Error())
}

View File

@@ -16,6 +16,6 @@ func (p *PurchaseHandler) ReadStoreSku(storeID, skuID int) (skuNameExt *model.Sk
return nil, nil
}
func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) {
func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isSync bool, userName string) (err error) {
return nil
}

View File

@@ -2,7 +2,9 @@ package controllers
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/model/dao"
"github.com/astaxie/beego"
)
@@ -41,7 +43,7 @@ func (c *StoreSkuController) GetStoreSkus() {
// @Description 修改商家商品绑定
// @Param token header string true "认证token"
// @Param storeID formData int true "需要修改的商品名IDpayload中的相应数据会被忽略"
// @Param payload formData string true "json数据StoreSkuBindInfo对象
// @Param payload formData string true "json数据StoreSkuBindInfo对象"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateStoreSku [put]
@@ -59,7 +61,7 @@ func (c *StoreSkuController) UpdateStoreSku() {
// @Description 批量修改商家商品绑定
// @Param token header string true "认证token"
// @Param storeID formData int true "需要修改的商品名IDpayload中的相应数据会被忽略"
// @Param payload formData string true "json数据StoreSkuBindInfo对象数组
// @Param payload formData string true "json数据StoreSkuBindInfo对象数组"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /UpdateStoreSkus [put]
@@ -72,3 +74,30 @@ func (c *StoreSkuController) UpdateStoreSkus() {
return retVal, "", err
})
}
// @Title 同步商家商品信息
// @Description 同步商家商品信息,单店模式厂商才支持
// @Param token header string true "认证token"
// @Param storeIDs formData string true "门店ID列表"
// @Param vendorID formData int true "厂商ID"
// @Param isSync formData bool true "是否同步操作"
// @Param skuIDs formData string false "SKU ID列表缺省为全部"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SyncStoreSkus [put]
func (c *StoreSkuController) SyncStoreSkus() {
c.callSyncStoreSkus(func(params *tStoreSkuSyncStoreSkusParams) (retVal interface{}, errCode string, err error) {
db := dao.GetDB()
var storeIDs []int
var skuIDs []int
if err = utils.UnmarshalUseNumber([]byte(params.StoreIDs), &storeIDs); err == nil {
if params.SkuIDs != "" {
err = utils.UnmarshalUseNumber([]byte(params.SkuIDs), &skuIDs)
}
if err == nil {
err = basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(params.VendorID).SyncStoreSkus(db, storeIDs, skuIDs, params.IsSync, GetUserNameFromToken(params.Token))
}
}
return retVal, "", err
})
}

35
controllers/cms_task.go Normal file
View File

@@ -0,0 +1,35 @@
package controllers
import (
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"github.com/astaxie/beego"
)
type TaskController struct {
beego.Controller
}
// @Title 查询长时间运行任务
// @Description 查询长时间运行任务
// @Param token header string true "认证token"
// @Param taskID query string false "任务ID"
// @Param fromStatus query int false "起始状态"
// @Param toStatus query int false "结束状态"
// @Param lastHours query int false "多少小时以内的"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetTasks [get]
func (c *TaskController) GetTasks() {
c.callGetTasks(func(params *tTaskGetTasksParams) (retVal interface{}, errCode string, err error) {
if params.MapData["fromStatus"] == nil {
params.FromStatus = tasksch.TaskStatusBegin
if params.MapData["toStatus"] == nil {
params.ToStatus = tasksch.TaskStatusEnd
}
} else if params.MapData["toStatus"] == nil {
params.ToStatus = params.FromStatus
}
retVal = tasksch.GetTasks(params.TaskID, params.FromStatus, params.ToStatus, params.LastHours)
return retVal, "", err
})
}

View File

@@ -415,6 +415,14 @@ func init() {
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{
Method: "SyncStoreSkus",
Router: `/SyncStoreSkus`,
AllowHTTPMethods: []string{"put"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{
Method: "UpdateStoreSku",
@@ -431,6 +439,14 @@ func init() {
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"],
beego.ControllerComments{
Method: "GetTasks",
Router: `/GetTasks`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:UserController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:UserController"],
beego.ControllerComments{
Method: "TmpAddMobile2Mobile",

View File

@@ -51,6 +51,11 @@ func init() {
&controllers.StoreSkuController{},
),
),
beego.NSNamespace("/task",
beego.NSInclude(
&controllers.TaskController{},
),
),
)
beego.AddNamespace(ns)