- delete then add in TransformJdSpu2Sku

This commit is contained in:
gazebo
2019-02-14 17:08:25 +08:00
parent f79c4b098d
commit 80a38f6790
4 changed files with 153 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"math"
"strings"
"sync"
"time"
"git.rosy.net.cn/baseapi/platformapi/jdapi"
@@ -645,3 +646,121 @@ func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenErro
}
return hint, err
}
func TransformJdSpu2Sku(ctx *jxcontext.Context, skuNameIDs []int, count int, isAsync, isContinueWhenError bool) (hint string, err error) {
sql := `
SELECT t1.*
FROM sku_name t1
WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.is_spu = 1
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
model.SkuStatusDeleted,
}
if len(skuNameIDs) > 0 {
sql += " AND t1.id IN (" + dao.GenQuestionMarks(len(skuNameIDs)) + ")"
sqlParams = append(sqlParams, skuNameIDs)
}
sql += " ORDER BY t1.id"
if count > 0 {
sql += " LIMIT ?"
sqlParams = append(sqlParams, count)
}
db := dao.GetDB()
var skuNameList []*model.SkuName
if err = dao.GetRows(db, &skuNameList, sql, sqlParams...); err != nil {
return "", err
}
if len(skuNameList) == 0 {
return "", fmt.Errorf("待转换的skuName为空")
}
batchSize := 40
rootTask := tasksch.NewSeqTask("TransformJdSpu2Sku", ctx.GetUserName(), func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
var (
locker sync.Mutex
skuIDs []int
)
lastIndex := (step + 1) * batchSize
if lastIndex > len(skuNameList) {
lastIndex = len(skuNameList)
}
batchSkNameList := skuNameList[step*batchSize : lastIndex]
subTask := tasksch.NewParallelTask(fmt.Sprintf("TransformJdSpu2Sku:%d", step), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx.GetUserName(), func(subTask *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
skuName := batchItemList[0].(*model.SkuName)
if true { //!jxutils.IsFakeID(skuName.JdID) {
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
}
globals.SugarLogger.Debugf("TransformJdSpu2Sku skuList:%s", utils.Format4Output(skuList, false))
if len(skuList) > 0 {
for _, sku := range skuList {
locker.Lock()
skuIDs = append(skuIDs, sku.ID)
locker.Unlock()
if !jxutils.IsFakeID(sku.JdID) {
if globals.EnableStoreWrite {
if err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuName.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted)); err != nil {
break
}
}
}
}
}
if err == nil && globals.EnableStoreWrite {
if err = api.JdAPI.UpdateSpu(utils.Int2Str(skuName.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusOffline)); err == nil {
err = api.JdAPI.UpdateSpu(utils.Int2Str(skuName.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted))
}
}
if err == nil {
skuName.IsSpu = 0
if _, err = dao.UpdateEntity(db, skuName, "IsSpu"); err == nil {
sql := `
UPDATE sku t1
SET
t1.jd_sync_status = ?,
t1.jd_id = 0
WHERE t1.name_id = ? AND t1.deleted_at = ? AND t1.status <> ?
`
sqlParams := []interface{}{
model.SyncFlagNewMask,
skuName.ID,
utils.DefaultTimeValue,
model.SkuStatusDeleted,
}
if _, err = dao.ExecuteSQL(db, sql, sqlParams...); err == nil {
_, err = cms.CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, isContinueWhenError, ctx.GetUserName())
}
}
}
}
return nil, err
}, batchSkNameList)
rootTask.AddChild(subTask).Run()
if _, err = subTask.GetResult(0); err == nil {
if len(skuIDs) > 0 {
if _, err = dao.SetStoreSkuSyncStatus(db, model.VendorIDJD, -1, skuIDs, model.SyncFlagModifiedMask|model.SyncFlagPriceMask|model.SyncFlagSaleMask); err == nil {
_, err = cms.CurVendorSync.SyncStoresSkus(ctx, db, []int{model.VendorIDJD}, nil, skuIDs, false, isContinueWhenError)
}
}
}
return nil, err
}, (len(skuNameList)-1)/batchSize+1)
tasksch.ManageTask(rootTask).Run()
if !isAsync {
_, err = rootTask.GetResult(0)
} else {
hint = rootTask.ID
}
return hint, err
}

View File

@@ -201,12 +201,15 @@ func SetStoreSkuSyncStatus(db *DaoDB, vendorID, storeID int, skuIDs []int, syncS
sql := fmt.Sprintf(`
UPDATE store_sku_bind
SET %s_sync_status = %s_sync_status | ?
WHERE deleted_at = ? AND store_id = ?
WHERE deleted_at = ?
`, fieldPrefix, fieldPrefix)
sqlParams := []interface{}{
syncStatus,
utils.DefaultTimeValue,
storeID,
}
if storeID > 0 {
sql += " AND store_id = ?"
sqlParams = append(sqlParams, storeID)
}
if len(skuIDs) > 0 {
sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"

View File

@@ -106,3 +106,24 @@ func (c *InitDataController) DeleteWrongSpu() {
return retVal, "", err
})
}
// @Title 将京东的SPU转为非SPU保持转后的SKU商家自编号不变
// @Description 将京东的SPU转为非SPU保持转后的SKU商家自编号不变
// @Param token header string true "认证token"
// @Param nameIDs formData string false "需要转换的nameID列表缺省空表示全部"
// @Param count formData int false "转换的数量缺省0表示全部按ID排序"
// @Param isAsync formData bool false "是否异步操作"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /TransformJdSpu2Sku [post]
func (c *InitDataController) TransformJdSpu2Sku() {
c.callTransformJdSpu2Sku(func(params *tInitdataTransformJdSpu2SkuParams) (retVal interface{}, errCode string, err error) {
var nameIDs []int
if err = jxutils.Strings2Objs(params.NameIDs, &nameIDs); err != nil {
return retVal, "", err
}
retVal, err = tempop.TransformJdSpu2Sku(params.Ctx, nameIDs, params.Count, params.IsAsync, params.IsContinueWhenError)
return retVal, "", err
})
}

View File

@@ -255,6 +255,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: "TransformJdSpu2Sku",
Router: `/TransformJdSpu2Sku`,
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: "UploadWeimobImg4SkuName",