From a8974ff4a6f03e15a9978c92d9cffb0645ead1a7 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 25 Sep 2018 17:49:20 +0800 Subject: [PATCH] - UpdateEntityLogicallyAndUpdateSyncStatus for model.SyncFlagModifiedMask --- business/jxstore/cms/sku.go | 14 +++++--------- business/jxstore/cms/store.go | 21 ++++++++++++--------- business/jxstore/cms/sync.go | 7 +++++-- business/model/dao/dao_bz.go | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 20 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index ddfb8f778..2fd46e48b 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -69,9 +69,8 @@ func UpdateCategory(categoryID int, payload map[string]interface{}, userName str cat.ID = categoryID valid := dao.NormalMakeMapByStructObject(payload, cat, userName) if len(valid) > 0 { - valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask db := dao.GetDB() - if num, err = dao.UpdateEntityLogically(db, cat, valid, userName, nil); err == nil { + if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, cat, valid, userName, nil, model.FieldJdSyncStatus); err == nil { err = CurVendorSync.SyncCategory(db, categoryID, false, userName) } } @@ -100,7 +99,7 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er } for k, v := range categoryIDs { catsMap[v].Seq = k - catsMap[v].JdSyncStatus = model.SyncFlagModifiedMask + catsMap[v].JdSyncStatus |= model.SyncFlagModifiedMask if _, err = dao.UpdateEntity(db, catsMap[v], "Seq"); err != nil { break } @@ -396,11 +395,9 @@ func UpdateSkuName(nameID int, payload map[string]interface{}, userName string) } if err == nil { sku := &model.Sku{} - _, err2 := dao.UpdateEntityLogically(db, sku, map[string]interface{}{ - model.FieldJdSyncStatus: model.SyncFlagModifiedMask, - }, userName, map[string]interface{}{ + _, err2 := dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, nil, userName, map[string]interface{}{ model.FieldNameID: nameID, - }) + }, model.FieldJdSyncStatus) if err = err2; err == nil { dao.Commit(db) err2 = CurVendorSync.SyncSku(db, nameID, -1, false, userName) @@ -472,9 +469,8 @@ func UpdateSku(skuID int, payload map[string]interface{}, userName string) (num sku.ID = skuID valid := dao.NormalMakeMapByStructObject(payload, sku, userName) if len(valid) > 0 { - valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask db := dao.GetDB() - if num, err = dao.UpdateEntityLogically(db, sku, valid, userName, nil); err == nil { + if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, valid, userName, nil, model.FieldJdSyncStatus); err == nil { if num == 1 { err = CurVendorSync.SyncSku(db, -1, sku.ID, false, userName) } else { diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 8b2b971c0..410fc0f30 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -193,11 +193,9 @@ func UpdateStore(storeID int, payload map[string]interface{}, userName string) ( }() if num, err = dao.UpdateEntityLogically(db, store, valid, userName, nil); err == nil && num == 1 { dummy := &model.StoreMap{} - _, err2 := dao.UpdateEntityLogically(db, dummy, map[string]interface{}{ - model.FieldSyncStatus: model.SyncFlagModifiedMask, - }, userName, map[string]interface{}{ + _, err2 := dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, dummy, nil, userName, map[string]interface{}{ model.FieldStoreID: store.ID, - }) + }, model.FieldSyncStatus) if err = err2; err == nil { dao.Commit(db) err = CurVendorSync.SyncStore(db, -1, store.ID, false, userName) @@ -301,12 +299,17 @@ func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[stri valid := dao.NormalMakeMapByStructObject(payload, dummyStoreMap, userName) if len(valid) > 0 { if valid["status"] != nil { // 对于store vendor map,只有Status改变才需要同步到厂商 - valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask + num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, dummyStoreMap, valid, userName, map[string]interface{}{ + model.FieldStoreID: storeID, + model.FieldVendorID: vendorID, + }, model.FieldSyncStatus) + } else { + num, err = dao.UpdateEntityLogically(db, dummyStoreMap, valid, userName, map[string]interface{}{ + model.FieldStoreID: storeID, + model.FieldVendorID: vendorID, + }) } - if num, err = dao.UpdateEntityLogically(db, dummyStoreMap, valid, userName, map[string]interface{}{ - model.FieldStoreID: storeID, - model.FieldVendorID: vendorID, - }); err == nil && num > 0 { + if err == nil && num > 0 { if valid["status"] != nil { err = CurVendorSync.SyncStore(db, vendorID, storeID, false, userName) } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 30deed38f..302ee44ac 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -236,9 +236,12 @@ func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, isForce bool, userName str } func makeSyncError(err error) (newErr error) { - return &SyncError{ - Original: err, + if err != nil { + return &SyncError{ + Original: err, + } } + return err } func (e *SyncError) Error() string { diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index 353db5089..7e01c6d8c 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -70,6 +70,41 @@ func UpdateEntityLogically(db *DaoDB, item interface{}, kvs map[string]interface }), conditions) } +// 些函数会更新同步标志 +func UpdateEntityLogicallyAndUpdateSyncStatus(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}, syncStatusFieldName string) (num int64, err error) { + if conditions != nil { + conditions = utils.MergeMaps(conditions, map[string]interface{}{ + model.FieldDeletedAt: utils.DefaultTimeValue, + }) + } else { + conditions = map[string]interface{}{ + model.FieldID: jxutils.GetObjFieldByName(item, model.FieldID), + } + } + typeInfo := reflect.TypeOf(item) + valueRows := reflect.New(reflect.SliceOf(typeInfo)) + rows := valueRows.Interface() + if err = GetEntitiesByKV(db, rows, conditions, false); err == nil { + // globals.SugarLogger.Debug(utils.Format4Output(rows, false)) + valueRows = reflect.Indirect(valueRows) + for i := 0; i < valueRows.Len(); i++ { + value := reflect.Indirect(valueRows.Index(i)) + status := value.FieldByName(syncStatusFieldName).Int() | model.SyncFlagModifiedMask + num2, err2 := UpdateEntityByKV(db, value.Interface(), utils.MergeMaps(kvs, map[string]interface{}{ + model.FieldUpdatedAt: time.Now(), + model.FieldLastOperator: userName, + syncStatusFieldName: status, + }), nil) + if err = err2; err == nil { + num += num2 + } else { + return num, err + } + } + } + return num, err +} + func DeleteEntityLogically(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}) (num int64, err error) { return UpdateEntityLogically(db, item, utils.MergeMaps(kvs, map[string]interface{}{ model.FieldDeletedAt: time.Now(),