- 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
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 = ?
WHERE t1.name_id = ? AND t1.deleted_at = ?`
WHERE t1.name_id = ? AND t1.deleted_at = ?
FOR UPDATE`
sqlParams := []interface{}{
storeID,
utils.DefaultTimeValue,
@@ -585,38 +586,52 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, storeIDs []int, skuBind
return nil, err
}
} else {
needUpdate := false
// 用了SELECT FOR UPDATE后只更新修改字段是没有必要的暂时保留
updateFieldMap := make(map[string]int)
if skuBindInfo.IsFocus == 1 {
skuBind.Status = model.StoreSkuBindStatusDontSale // 缺省不可售?
skuBind.DeletedAt = utils.DefaultTimeValue
skuBind.UnitPrice = unitPrice
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
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 {
skuBind.Status = tmpStatus
setStoreSkuBindStatus(skuBind, model.SyncFlagSaleMask)
needUpdate = true
updateFieldMap[model.FieldStatus] = 1
}
if skuBindInfo.UnitPrice != 0 { // 这里是否需要加此条件限制
skuBind.UnitPrice = unitPrice
skuBind.Price = jxutils.CaculateSkuPrice(unitPrice, v.SpecQuality, v.SpecUnit, v.SkuNameUnit)
setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask)
needUpdate = true
updateFieldMap["UnitPrice"] = 1
updateFieldMap["Price"] = 1
}
if inSkuBind != nil && inSkuBind.EbaiID != 0 {
skuBind.EbaiID = inSkuBind.EbaiID
needUpdate = true
}
if inSkuBind != nil && inSkuBind.ElmID != 0 {
skuBind.ElmID = inSkuBind.ElmID
needUpdate = true
}
if needUpdate {
// todo 这里应该是不需处理这个信息的吧?
// if inSkuBind != nil && inSkuBind.EbaiID != 0 {
// skuBind.EbaiID = inSkuBind.EbaiID
// updateFieldMap["EbaiID"] = 1
// }
// if inSkuBind != nil && inSkuBind.ElmID != 0 {
// skuBind.ElmID = inSkuBind.ElmID
// updateFieldMap["ElmID"] = 1
// }
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)
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)
return nil, err
}