diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go index 0f4da6137..2d1046eb2 100644 --- a/business/jxstore/initdata/initdata.go +++ b/business/jxstore/initdata/initdata.go @@ -243,42 +243,58 @@ func InitSkuName(ctx *jxcontext.Context, isForce, isAsync, isContinueWhenError b return hint, err } -func InitVendorCategory(ctx *jxcontext.Context, vendorID int) (num int64, err error) { +func InitVendorCategory(ctx *jxcontext.Context, vendorID int, isAsync bool) (hint string, err error) { if handler := partner.GetPurchasePlatformFromVendorID(vendorID); handler != nil { - cats, err2 := handler.GetVendorCategories(ctx) - if err2 != nil { - return num, err2 - } - db := dao.GetDB() - dao.Begin(db) - defer func() { - if r := recover(); r != nil || err != nil { - dao.Rollback(db) - if r != nil { - panic(r) + var cats []*model.SkuVendorCategory + rootTask := tasksch.NewSeqTask(fmt.Sprintf("创建%s的平台分类", model.VendorChineseNames[vendorID]), ctx, + func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + cats, err = handler.GetVendorCategories(ctx) + if err != nil { + return nil, err + } + case 1: + db := dao.GetDB() + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + sql := ` + DELETE + FROM sku_vendor_category + WHERE vendor_id = ? + ` + if _, err = dao.ExecuteSQL(db, sql, vendorID); err != nil { + return nil, err + } + for _, cat := range cats { + dao.WrapAddIDCULEntity(cat, ctx.GetUserName()) + if err = dao.CreateEntity(db, cat); err != nil { + return nil, err + } + } + dao.Commit(db) } + return nil, err + }, 2) + tasksch.HandleTask(rootTask, nil, true).Run() + if !isAsync { + if _, err = rootTask.GetResult(0); err == nil { + hint = utils.Int2Str(len(cats)) } - }() - sql := ` - DELETE - FROM sku_vendor_category - WHERE vendor_id = ? - ` - if _, err = dao.ExecuteSQL(db, sql, vendorID); err != nil { - return num, err + } else { + hint = rootTask.ID } - for _, cat := range cats { - dao.WrapAddIDCULEntity(cat, ctx.GetUserName()) - if err = dao.CreateEntity(db, cat); err != nil { - return num, err - } - } - dao.Commit(db) - num = int64(len(cats)) } else { err = fmt.Errorf("找不到平台:%d", vendorID) } - return num, err + return hint, err } func UploadImg4Vendors(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { diff --git a/controllers/init_data.go b/controllers/init_data.go index ae03dfe8d..0226244c3 100644 --- a/controllers/init_data.go +++ b/controllers/init_data.go @@ -42,12 +42,13 @@ func (c *InitDataController) InitSkuName() { // @Description 初始化vendor category(当前只有美团外卖的通过这个设置) // @Param token header string true "认证token" // @Param vendorID formData int true "厂商ID" +// @Param isAsync formData bool false "是否异步操作" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /InitVendorCategory [post] func (c *InitDataController) InitVendorCategory() { c.callInitVendorCategory(func(params *tInitdataInitVendorCategoryParams) (retVal interface{}, errCode string, err error) { - retVal, err = initdata.InitVendorCategory(params.Ctx, params.VendorID) + retVal, err = initdata.InitVendorCategory(params.Ctx, params.VendorID, params.IsAsync) return retVal, "", err }) }