diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index cc0a038fb..bfabe89ad 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -96,7 +96,7 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i valid["name"] = strings.Trim(valid["name"].(string), " ") } db := dao.GetDB() - if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, cat, valid, userName, nil, model.FieldJdSyncStatus); err == nil { + if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, cat, valid, userName, nil, model.FieldJdSyncStatus, model.SyncFlagModifiedMask); err == nil { _, err = CurVendorSync.SyncCategory(ctx, db, categoryID, false, userName) } } @@ -497,7 +497,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf if valid["img"] != "" { valid["imgWeimob"] = "" } - if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, skuName, valid, userName, nil, model.FieldJdSyncStatus); err == nil && num == 1 { + if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, skuName, valid, userName, nil, model.FieldJdSyncStatus, model.SyncFlagModifiedMask); err == nil && num == 1 { if utils.Interface2Int64WithDefault(payload["isGlobal"], 0) == 0 && payload["places"] != nil { if places, ok := payload["places"].([]interface{}); ok { if _, err = dao.DeleteSkuNamePlace(db, nameID, nil); err == nil { @@ -519,7 +519,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf sku := &model.Sku{} _, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, nil, userName, map[string]interface{}{ model.FieldNameID: nameID, - }, model.FieldJdSyncStatus) + }, model.FieldJdSyncStatus, model.SyncFlagModifiedMask) if err == nil { dao.Commit(db) _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) @@ -599,14 +599,21 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}, userName string) (num int64, err error) { sku := &model.Sku{} sku.ID = skuID - valid := dao.NormalMakeMapByStructObject(payload, sku, userName) + db := dao.GetDB() + if err = dao.GetEntity(db, sku); err != nil { + return 0, err + } + valid := dao.StrictMakeMapByStructObject(payload, sku, userName) if len(valid) > 0 { - db := dao.GetDB() dao.Begin(db) defer func() { dao.Rollback(db) }() - if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, valid, userName, nil, model.FieldJdSyncStatus); err == nil { + maskValue := model.SyncFlagModifiedMask + if valid["specQuality"] != nil || valid["specUnit"] != nil { + maskValue |= model.SyncFlagSpecMask + } + if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, valid, userName, nil, model.FieldJdSyncStatus, maskValue); err == nil { if num == 1 { if num, err = dao.ExecuteSQL(db, ` UPDATE sku_name t1 diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index a8f1cf8c3..4d17c612b 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -387,7 +387,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa dummy := &model.StoreMap{} _, err2 := dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, dummy, nil, userName, map[string]interface{}{ model.FieldStoreID: store.ID, - }, model.FieldSyncStatus) + }, model.FieldSyncStatus, model.SyncFlagModifiedMask) if err = err2; err == nil { dao.Commit(db) _, err = CurVendorSync.SyncStore(ctx, db, -1, store.ID, false, userName) @@ -530,7 +530,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, storeMap, valid, userName, map[string]interface{}{ model.FieldStoreID: storeID, model.FieldVendorID: vendorID, - }, model.FieldSyncStatus) + }, model.FieldSyncStatus, model.SyncFlagModifiedMask) } else { num, err = dao.UpdateEntityLogically(db, storeMap, valid, userName, map[string]interface{}{ model.FieldStoreID: storeID, @@ -542,7 +542,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor storeSkuBind := &model.StoreSkuBind{} if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, storeSkuBind, nil, userName, map[string]interface{}{ model.FieldStoreID: storeID, - }, dao.GetSyncStatusStructField(model.VendorNames[vendorID])); err != nil { + }, dao.GetSyncStatusStructField(model.VendorNames[vendorID]), model.SyncFlagModifiedMask); err != nil { return 0, err } } diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index b14356c0d..8c2fef9eb 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -70,7 +70,7 @@ func UpdateEntityLogically(db *DaoDB, item interface{}, kvs map[string]interface } // 此函数会更新同步标志 -func UpdateEntityLogicallyAndUpdateSyncStatus(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}, syncStatusFieldName string) (num int64, err error) { +func UpdateEntityLogicallyAndUpdateSyncStatus(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}, syncStatusFieldName string, valueMask int) (num int64, err error) { if conditions != nil { conditions = utils.MergeMaps(conditions, map[string]interface{}{ model.FieldDeletedAt: utils.DefaultTimeValue, @@ -88,7 +88,7 @@ func UpdateEntityLogicallyAndUpdateSyncStatus(db *DaoDB, item interface{}, kvs m valueRows = reflect.Indirect(valueRows) for i := 0; i < valueRows.Len(); i++ { value := reflect.Indirect(valueRows.Index(i)) - status := value.FieldByName(syncStatusFieldName).Int() | model.SyncFlagModifiedMask + status := value.FieldByName(syncStatusFieldName).Int() | int64(valueMask) num2, err2 := UpdateEntityByKV(db, value.Interface(), utils.MergeMaps(kvs, map[string]interface{}{ model.FieldUpdatedAt: time.Now(), model.FieldLastOperator: userName, diff --git a/business/model/model.go b/business/model/model.go index 6583c69ef..069f34139 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -68,6 +68,7 @@ const ( SyncFlagSaleMask = 8 SyncFlagPriceMask = 16 + SyncFlagSpecMask = 32 ) // const ( diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index b889ceb56..fc27c1148 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -547,7 +547,7 @@ func (p *PurchaseHandler) processLocalCatByRemote(db *dao.DaoDB, storeID int, lo } else { // 远程有,本门店有,但ID信息不一致 _, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, &jxCat.StoreSkuCategoryMap, map[string]interface{}{ model.FieldEbaiID: v.CategoryID, - }, userName, nil, model.FieldEbaiSyncStatus) + }, userName, nil, model.FieldEbaiSyncStatus, model.SyncFlagModifiedMask) } } else { // 两边都有,且信息一致 } diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index 488c6c6bd..27ae9c88c 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -461,9 +461,11 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt params[jdapi.KeySkuPrice] = price if globals.EnableStoreWrite { err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.MergeMaps(params, skuAddParams)) - // skuIndex := sku.SkuIndex - // saleAttrValue := composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit) - // err = api.JdAPI.UpdateSpuSaleAttr(utils.Int2Str(skuExt.ID), utils.Int2Str(jdapi.SaleAttrIDBase), "", utils.Int2Str(jdapi.SaleAttrValueIDBase+skuIndex-1), saleAttrValue) + skuIndex := sku.SkuIndex + if skuIndex > 0 { + saleAttrValue := composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit) + err = api.JdAPI.UpdateSpuSaleAttr(utils.Int2Str(skuExt.ID), utils.Int2Str(jdapi.SaleAttrIDBase), "", utils.Int2Str(jdapi.SaleAttrValueIDBase+skuIndex-1), saleAttrValue) + } } } if err == nil {