- delete then add in TransformJdSpu2Sku
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||||
@@ -645,3 +646,121 @@ func CreateOrderFromOriginal(ctx *jxcontext.Context, isAsync, isContinueWhenErro
|
|||||||
}
|
}
|
||||||
return hint, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -201,12 +201,15 @@ func SetStoreSkuSyncStatus(db *DaoDB, vendorID, storeID int, skuIDs []int, syncS
|
|||||||
sql := fmt.Sprintf(`
|
sql := fmt.Sprintf(`
|
||||||
UPDATE store_sku_bind
|
UPDATE store_sku_bind
|
||||||
SET %s_sync_status = %s_sync_status | ?
|
SET %s_sync_status = %s_sync_status | ?
|
||||||
WHERE deleted_at = ? AND store_id = ?
|
WHERE deleted_at = ?
|
||||||
`, fieldPrefix, fieldPrefix)
|
`, fieldPrefix, fieldPrefix)
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
syncStatus,
|
syncStatus,
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
storeID,
|
}
|
||||||
|
if storeID > 0 {
|
||||||
|
sql += " AND store_id = ?"
|
||||||
|
sqlParams = append(sqlParams, storeID)
|
||||||
}
|
}
|
||||||
if len(skuIDs) > 0 {
|
if len(skuIDs) > 0 {
|
||||||
sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
|
|||||||
@@ -106,3 +106,24 @@ func (c *InitDataController) DeleteWrongSpu() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -255,6 +255,14 @@ func init() {
|
|||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Params: nil})
|
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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:InitDataController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "UploadWeimobImg4SkuName",
|
Method: "UploadWeimobImg4SkuName",
|
||||||
|
|||||||
Reference in New Issue
Block a user