From e47542dda0f9077882cb2c9e40425b5373645cd8 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 1 Mar 2019 10:23:07 +0800 Subject: [PATCH] - SELECT FOR UPDATE 4 updateStoresSkusWithoutSync --- business/jxstore/cms/store_sku.go | 45 ++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index f38313fa1..ca194a9c8 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -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 }