+ ForceSyncSkuNames
- refactor sync.SyncSku
This commit is contained in:
@@ -242,13 +242,28 @@ func (v *VendorSync) SyncStore(ctx *jxcontext.Context, db *dao.DaoDB, vendorID,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
||||||
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, nameID:%d, skuID:%d, userName:%s", ctx.GetTrackInfo(), nameID, skuID, userName)
|
var (
|
||||||
return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameID:%d, skuID:%d", nameID, skuID), isAsync, userName,
|
nameIDs []int
|
||||||
|
skuIDs []int
|
||||||
|
)
|
||||||
|
if nameID != -1 {
|
||||||
|
nameIDs = []int{nameID}
|
||||||
|
}
|
||||||
|
if skuID != -1 {
|
||||||
|
skuIDs = []int{skuID}
|
||||||
|
}
|
||||||
|
return v.SyncSkus(ctx, db, nameIDs, skuIDs, isAsync, isContinueWhenError, userName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []int, skuIDs []int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) {
|
||||||
|
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, nameIDs:%v, skuIDs:%v, userName:%s", ctx.GetTrackInfo(), nameIDs, skuIDs, userName)
|
||||||
|
return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, userName,
|
||||||
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
vendorID := batchItemList[0].(int)
|
vendorID := batchItemList[0].(int)
|
||||||
multiStoresHandler := v.GetMultiStoreHandler(vendorID)
|
multiStoresHandler := v.GetMultiStoreHandler(vendorID)
|
||||||
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
|
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||||
dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
|
dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
|
||||||
|
skuMap := make(map[int]bool)
|
||||||
sql := fmt.Sprintf(`
|
sql := fmt.Sprintf(`
|
||||||
SELECT DISTINCT t2.*
|
SELECT DISTINCT t2.*
|
||||||
FROM sku t1
|
FROM sku t1
|
||||||
@@ -256,14 +271,23 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
|
|||||||
WHERE t1.%s_sync_status <> 0
|
WHERE t1.%s_sync_status <> 0
|
||||||
`, dbField)
|
`, dbField)
|
||||||
sqlParams := []interface{}{}
|
sqlParams := []interface{}{}
|
||||||
if nameID != -1 {
|
if len(nameIDs) > 1 {
|
||||||
sql += " AND t1.name_id = ?"
|
sql += " AND t1.name_id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, nameID)
|
sqlParams = append(sqlParams, nameIDs)
|
||||||
|
} else if len(nameIDs) == 1 {
|
||||||
|
sql += " AND t1.name_id = ? "
|
||||||
|
sqlParams = append(sqlParams, nameIDs[0])
|
||||||
}
|
}
|
||||||
if skuID != -1 {
|
if len(skuIDs) > 0 {
|
||||||
sql += " AND t1.id = ?"
|
sql += " AND t1.id IN(" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, skuID)
|
sqlParams = append(sqlParams, skuIDs)
|
||||||
|
|
||||||
|
} else if len(skuIDs) == 1 {
|
||||||
|
sql += " AND t1.id = ? "
|
||||||
|
sqlParams = append(sqlParams, skuIDs[0])
|
||||||
|
}
|
||||||
|
for _, v := range skuIDs {
|
||||||
|
skuMap[v] = true
|
||||||
}
|
}
|
||||||
sql += " ORDER BY t2.id"
|
sql += " ORDER BY t2.id"
|
||||||
|
|
||||||
@@ -284,7 +308,7 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI
|
|||||||
for _, sku := range skuList {
|
for _, sku := range skuList {
|
||||||
syncStatus := refutil.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
syncStatus := refutil.GetObjFieldByName(sku, syncStatusFieldName).(int8)
|
||||||
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, skuID:%d, syncStatus:%d", ctx.GetTrackInfo(), sku.ID, syncStatus)
|
globals.SugarLogger.Debugf("SyncSku trackInfo:%s, skuID:%d, syncStatus:%d", ctx.GetTrackInfo(), sku.ID, syncStatus)
|
||||||
if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) {
|
if (len(skuIDs) == 0 || skuMap[sku.ID]) && (syncStatus != 0) {
|
||||||
updateFields := []string{syncStatusFieldName}
|
updateFields := []string{syncStatusFieldName}
|
||||||
if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||||
if syncStatus&model.SyncFlagNewMask == 0 {
|
if syncStatus&model.SyncFlagNewMask == 0 {
|
||||||
@@ -543,3 +567,25 @@ func isSyncError(err error) bool {
|
|||||||
_, ok := err.(*SyncError)
|
_, ok := err.(*SyncError)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *VendorSync) ForceSyncSkuNames(ctx *jxcontext.Context, nameIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
|
sql := `
|
||||||
|
UPDATE sku t1
|
||||||
|
SET t1.jd_sync_status = t1.jd_sync_status | ?
|
||||||
|
WHERE t1.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
model.SyncFlagModifiedMask,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if len(nameIDs) > 0 {
|
||||||
|
sql += " AND t1.name_id IN(" + dao.GenQuestionMarks(len(nameIDs)) + ")"
|
||||||
|
sqlParams = append(sqlParams, nameIDs)
|
||||||
|
}
|
||||||
|
|
||||||
|
db := dao.GetDB()
|
||||||
|
if _, err = dao.ExecuteSQL(db, sql, sqlParams...); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return v.SyncSkus(ctx, db, nameIDs, nil, isAsync, isContinueWhenError, ctx.GetUserName())
|
||||||
|
}
|
||||||
|
|||||||
@@ -139,3 +139,22 @@ func (c *SyncController) DeleteRemoteStoreSkus() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 强制同步SKU(多门店平台)
|
||||||
|
// @Description 强制同步SKU(多门店平台)
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param nameIDs formData string false "name ID列表"
|
||||||
|
// @Param isAsync formData bool false "是否异步"
|
||||||
|
// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /ForceSyncSkuNames [put]
|
||||||
|
func (c *SyncController) ForceSyncSkuNames() {
|
||||||
|
c.callForceSyncSkuNames(func(params *tSyncForceSyncSkuNamesParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
var nameIDs []int
|
||||||
|
if err = jxutils.Strings2Objs(params.NameIDs, &nameIDs); err == nil {
|
||||||
|
retVal, err = cms.CurVendorSync.ForceSyncSkuNames(params.Ctx, nameIDs, params.IsAsync, params.IsContinueWhenError)
|
||||||
|
}
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1213,6 +1213,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "ForceSyncSkuNames",
|
||||||
|
Router: `/ForceSyncSkuNames`,
|
||||||
|
AllowHTTPMethods: []string{"put"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "FullSyncStoresSkus",
|
Method: "FullSyncStoresSkus",
|
||||||
|
|||||||
Reference in New Issue
Block a user