diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go index c66095753..99074212f 100644 --- a/business/jxstore/initdata/initdata.go +++ b/business/jxstore/initdata/initdata.go @@ -8,12 +8,15 @@ import ( "git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxutils" "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" "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" + "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -193,3 +196,88 @@ func InitVendorCategory(ctx *jxcontext.Context) (num int64, err error) { } return num, err } + +func Convert2JDSPU(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint string, err error) { + sql := ` + SELECT t1.* + FROM sku_name t1 + LEFT JOIN sku_name t2 ON t1.link_id = t2.id + WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.is_spu = 0 AND t1.unit = '份' + AND t2.id IS NULL + ; + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + model.SkuStatusDeleted, + } + + db := dao.GetDB() + var skuNameList []*model.SkuName + if err = dao.GetRows(db, &skuNameList, sql, sqlParams...); err != nil { + return "", err + } + globals.SugarLogger.Debug(len(skuNameList)) + for _, skuName := range skuNameList { + globals.SugarLogger.Debug(skuName.Name) + sql = ` + SELECT * + FROM sku + WHERE name_id = ? AND deleted_at = ? AND status <> ?; + ` + sqlParams := []interface{}{ + skuName.ID, + utils.DefaultTimeValue, + model.SkuStatusDeleted, + } + var skuList []*model.Sku + if err = dao.GetRows(db, &skuList, sql, sqlParams...); err != nil { + return "", err + } + if len(skuList) > 0 { + dao.Begin(db) + skuNameNew := &(*skuName) + dao.WrapAddIDCULEntity(skuNameNew, ctx.GetUserName()) + skuNameNew.JdID = 0 + skuNameNew.LinkID = skuName.ID + skuNameNew.IsSpu = 1 + if err = dao.CreateEntity(db, skuNameNew); err != nil { + dao.Rollback(db) + return "", err + } + for _, sku := range skuList { + skuNew := &(*sku) + dao.WrapAddIDCULEntity(skuNew, ctx.GetUserName()) + skuNew.JdID = jxutils.GenFakeID() + skuNew.LinkID = sku.ID + skuNew.NameID = skuNameNew.ID + if err = dao.CreateEntity(db, skuNew); err != nil { + dao.Rollback(db) + return "", err + } + } + dao.Commit(db) + } + } + sql = ` + SELECT t1.* + FROM sku_name t1 + WHERE t1.link_id <> 0; + ` + if err = dao.GetRows(db, &skuNameList, sql); err != nil { + return "", err + } + + rootTask := tasksch.NewParallelTask("Convert2JDSPU", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx.GetUserName(), func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + skuName := batchItemList[0].(*model.SkuName) + _, err = cms.CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, ctx.GetUserName()) + return nil, err + }, skuNameList) + tasksch.ManageTask(rootTask).Run() + + if !isAsync { + _, err = rootTask.GetResult(0) + } else { + hint = rootTask.ID + } + return hint, err +} diff --git a/business/model/sku.go b/business/model/sku.go index d21bf9953..83a5b617c 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -167,13 +167,15 @@ type SkuName struct { Upc string `orm:"size(20)"` Status int `orm:"default(1)" json:"status"` // skuname状态,取值同sku.Status IsSpu int8 `orm:"column(is_spu)" json:"isSpu"` // 用于指明是否SKUNAME当成SPU - JdID int64 `orm:"column(jd_id);null" json:"jdID"` + JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` + + LinkID int `orm:"column(link_id);null;index" json:"linkID"` } func (*SkuName) TableUnique() [][]string { return [][]string{ - []string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "DeletedAt"}, + []string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "IsSpu", "DeletedAt"}, } } @@ -188,15 +190,17 @@ type Sku struct { Weight int `json:"weight"` // 重量/质量,单位为克,当相应的SkuName的SpecUnit为g或kg时,必须等于SpecQuality Status int `json:"status"` - JdID int64 `orm:"column(jd_id);null" json:"jdID"` + JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` + + LinkID int `orm:"column(link_id);null;index" json:"linkID"` } -func (*Sku) TableUnique() [][]string { - return [][]string{ - []string{"JdID", "DeletedAt"}, - } -} +// func (*Sku) TableUnique() [][]string { +// return [][]string{ +// []string{"JdID", "DeletedAt"}, +// } +// } func (*Sku) TableIndex() [][]string { return [][]string{ diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index c5ce95263..c4ec7593b 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -396,8 +396,8 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt spuName := jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0) skus := []map[string]interface{}{ map[string]interface{}{ - jdapi.KeyOutSkuId: utils.Int2Str(sku.ID), - jdapi.KeySkuName: skuName, + jdapi.KeyOutSkuId: utils.Int2Str(sku.ID), + // jdapi.KeySkuName: skuName, jdapi.KeyFixedStatus: jxStatus2jdStatus(sku.Status), jdapi.KeySkuPrice: price, jdapi.KeyWeight: jxutils.IntWeight2Float(sku.Weight), diff --git a/controllers/init_data.go b/controllers/init_data.go index e0e4db859..630fa6180 100644 --- a/controllers/init_data.go +++ b/controllers/init_data.go @@ -50,3 +50,18 @@ func (c *InitDataController) InitVendorCategory() { return retVal, "", err }) } + +// @Title 将为份的商品在京东转成SPU +// @Description 将为份的商品在京东转成SPU +// @Param token header string true "认证token" +// @Param isAsync formData bool false "是否异步操作" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /Convert2JDSPU [post] +func (c *InitDataController) Convert2JDSPU() { + c.callConvert2JDSPU(func(params *tInitdataConvert2JDSPUParams) (retVal interface{}, errCode string, err error) { + retVal, err = initdata.Convert2JDSPU(params.Ctx, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index f6a9582cf..6557a99fb 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -167,6 +167,14 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], + beego.ControllerComments{ + Method: "Convert2JDSPU", + Router: `/Convert2JDSPU`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"], beego.ControllerComments{ Method: "InitPlace",