- SELECT FOR UPDATE 4 updateStoresSkusWithoutSync

This commit is contained in:
gazebo
2019-03-01 10:23:07 +08:00
parent 499aef9aaa
commit e47542dda0

View File

@@ -518,7 +518,8 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, storeIDs []int, skuBind
FROM sku t1 FROM sku t1
LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND store_id = ? AND t2.deleted_at = ? LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND store_id = ? AND t2.deleted_at = ?
JOIN sku_name t3 ON t1.name_id = t3.id AND t3.deleted_at = ? JOIN sku_name t3 ON t1.name_id = t3.id AND t3.deleted_at = ?
WHERE t1.name_id = ? AND t1.deleted_at = ?` WHERE t1.name_id = ? AND t1.deleted_at = ?
FOR UPDATE`
sqlParams := []interface{}{ sqlParams := []interface{}{
storeID, storeID,
utils.DefaultTimeValue, utils.DefaultTimeValue,
@@ -585,38 +586,52 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, storeIDs []int, skuBind
return nil, err return nil, err
} }
} else { } else {
needUpdate := false // 用了SELECT FOR UPDATE后只更新修改字段是没有必要的暂时保留
updateFieldMap := make(map[string]int)
if skuBindInfo.IsFocus == 1 { if skuBindInfo.IsFocus == 1 {
skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售? skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售?
skuBind.DeletedAt = utils.DefaultTimeValue skuBind.DeletedAt = utils.DefaultTimeValue
skuBind.UnitPrice = unitPrice skuBind.UnitPrice = unitPrice
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit) skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask|model.SyncFlagSaleMask) setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask|model.SyncFlagSaleMask)
needUpdate = true updateFieldMap[model.FieldStatus] = 1
updateFieldMap[model.FieldDeletedAt] = 1
updateFieldMap["UnitPrice"] = 1
updateFieldMap["Price"] = 1
} }
if tmpStatus := getSkuSaleStatus(inSkuBind, skuBindInfo); tmpStatus != model.StoreSkuBindStatusNA { if tmpStatus := getSkuSaleStatus(inSkuBind, skuBindInfo); tmpStatus != model.StoreSkuBindStatusNA {
skuBind.Status = tmpStatus skuBind.Status = tmpStatus
setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask) setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask)
needUpdate = true updateFieldMap[model.FieldStatus] = 1
} }
if skuBindInfo.UnitPrice != 0 { // 这里是否需要加此条件限制 if skuBindInfo.UnitPrice != 0 { // 这里是否需要加此条件限制
skuBind.UnitPrice = unitPrice skuBind.UnitPrice = unitPrice
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit) skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask) setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask)
needUpdate = true updateFieldMap["UnitPrice"] = 1
updateFieldMap["Price"] = 1
} }
if inSkuBind != nil && inSkuBind.EbaiID != 0 { // todo 这里应该是不需处理这个信息的吧?
skuBind.EbaiID = inSkuBind.EbaiID // if inSkuBind != nil && inSkuBind.EbaiID != 0 {
needUpdate = true // skuBind.EbaiID = inSkuBind.EbaiID
} // updateFieldMap["EbaiID"] = 1
if inSkuBind != nil && inSkuBind.ElmID != 0 { // }
skuBind.ElmID = inSkuBind.ElmID // if inSkuBind != nil && inSkuBind.ElmID != 0 {
needUpdate = true // skuBind.ElmID = inSkuBind.ElmID
} // updateFieldMap["ElmID"] = 1
if needUpdate { // }
if len(updateFieldMap) > 0 {
updateFieldMap[model.FieldJdSyncStatus] = 1
updateFieldMap[model.FieldElmSyncStatus] = 1
updateFieldMap[model.FieldEbaiSyncStatus] = 1
updateFieldMap[model.FieldMtwmSyncStatus] = 1
updateFieldMap[model.FieldWscSyncStatus] = 1
updateFieldMap[model.FieldUpdatedAt] = 1
updateFieldMap[model.FieldLastOperator] = 1
setStoreSkuBindStatus(skuBind, model.SyncFlagModifiedMask) setStoreSkuBindStatus(skuBind, model.SyncFlagModifiedMask)
dao.WrapUpdateULEntity(skuBind, userName) dao.WrapUpdateULEntity(skuBind, userName)
if num, err = dao.UpdateEntity(db, skuBind); err != nil { if num, err = dao.UpdateEntity(db, skuBind /*, utils.Map2KeySlice(updateFieldMap)...*/); err != nil {
dao.Rollback(db) dao.Rollback(db)
return nil, err return nil, err
} }