diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index bfabe89ad..3680fddf8 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -605,13 +605,28 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } valid := dao.StrictMakeMapByStructObject(payload, sku, userName) if len(valid) > 0 { + // globals.SugarLogger.Debug(utils.Format4Output(valid, false)) dao.Begin(db) defer func() { dao.Rollback(db) }() maskValue := model.SyncFlagModifiedMask if valid["specQuality"] != nil || valid["specUnit"] != nil { + skuName := &model.SkuName{} + skuName.ID = sku.NameID + if err = dao.GetEntity(db, skuName); err != nil { + return 0, err + } maskValue |= model.SyncFlagSpecMask + specQuality := sku.SpecQuality + if valid["specQuality"] != nil { + specQuality = float32(utils.MustInterface2Float64(valid["specQuality"])) + } + specUnit := sku.SpecUnit + if valid["specUnit"] != nil { + specUnit = utils.Interface2String(valid["specUnit"]) + } + valid["price"] = jxutils.CaculateSkuPrice(skuName.Price, specQuality, specUnit, skuName.Unit) } if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, valid, userName, nil, model.FieldJdSyncStatus, maskValue); err == nil { if num == 1 { diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 6bf06a3be..5ad2e77d6 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -366,7 +366,7 @@ func FilterMapByStructObject(mapData map[string]interface{}, obj interface{}, ex valid = make(map[string]interface{}) invalid = make(map[string]interface{}) for k, v := range mapData { - if m[k] != nil && excludedMap[k] == 0 && v != nil && (!isCheckValue || m[k] != v) { + if m[k] != nil && excludedMap[k] == 0 && v != nil && (!isCheckValue || !IsValueEqual(m[k], v)) { valid[k] = v } else { invalid[k] = v @@ -440,3 +440,7 @@ func Strings2Objs(strAndObjAddPairs ...interface{}) (err error) { } return nil } + +func IsValueEqual(value1, value2 interface{}) bool { + return fmt.Sprint(value1) == fmt.Sprint(value2) +} diff --git a/business/model/dao/dao_utils.go b/business/model/dao/dao_utils.go index 433d47cec..434976658 100644 --- a/business/model/dao/dao_utils.go +++ b/business/model/dao/dao_utils.go @@ -21,7 +21,6 @@ func NormalMakeMapByStructObject(mapData map[string]interface{}, obj interface{} return retVal } -// 此函数要求mapData中的数据类型是完全正确的(可利用函数utils.Unmarshal2Map),比如整数,浮点不能为通用的Number型 func StrictMakeMapByStructObject(mapData map[string]interface{}, obj interface{}, userName string) (retVal map[string]interface{}) { retVal, _ = IDCULDFilterMapByStructObject(mapData, obj, true) return retVal diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 1357aa8ea..8e11e2bc1 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -235,9 +235,8 @@ func (c *SkuController) AddSku() { // @router /UpdateSku [put] func (c *SkuController) UpdateSku() { c.callUpdateSku(func(params *tSkuUpdateSkuParams) (retVal interface{}, errCode string, err error) { - var payload map[string]interface{} - dummySku := &model.Sku{} - if payload, err = utils.Unmarshal2Map([]byte(params.Payload), dummySku); err == nil { + payload := make(map[string]interface{}) + if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil { retVal, err = cms.UpdateSku(params.Ctx, params.SkuID, payload, params.Ctx.GetUserName()) } return retVal, "", err diff --git a/controllers/cms_store.go b/controllers/cms_store.go index b3f3e9729..93da60884 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -66,9 +66,8 @@ func (c *StoreController) GetVendorStore() { // @router /UpdateStore [put] func (c *StoreController) UpdateStore() { c.callUpdateStore(func(params *tStoreUpdateStoreParams) (retVal interface{}, errCode string, err error) { - var payload map[string]interface{} - dummyStore := &model.Store{} - if payload, err = utils.Unmarshal2Map([]byte(params.Payload), dummyStore); err == nil { + payload := make(map[string]interface{}) + if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil { retVal, err = cms.UpdateStore(params.Ctx, params.StoreID, payload, params.Ctx.GetUserName()) } return retVal, "", err @@ -145,9 +144,8 @@ func (c *StoreController) GetStoreVendorMaps() { // @router /UpdateStoreVendorMap [put] func (c *StoreController) UpdateStoreVendorMap() { c.callUpdateStoreVendorMap(func(params *tStoreUpdateStoreVendorMapParams) (retVal interface{}, errCode string, err error) { - var payload map[string]interface{} - dummyStoreMap := &model.StoreMap{} - if payload, err = utils.Unmarshal2Map([]byte(params.Payload), dummyStoreMap); err == nil { + payload := make(map[string]interface{}) + if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil { retVal, err = cms.UpdateStoreVendorMap(params.Ctx, nil, params.StoreID, params.VendorID, payload, params.Ctx.GetUserName()) } return retVal, "", err