SkuName.Upc改为*string(以支持null及添加唯一索引)

This commit is contained in:
gazebo
2019-12-23 16:15:14 +08:00
parent 23136cc467
commit 01247221c4
4 changed files with 78 additions and 26 deletions

View File

@@ -659,17 +659,19 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
if hasSensitiveWord, err := CheckHasSensitiveWord(skuNameExt.Name); hasSensitiveWord { if hasSensitiveWord, err := CheckHasSensitiveWord(skuNameExt.Name); hasSensitiveWord {
return nil, err return nil, err
} }
if utils.Pointer2String(skuNameExt.Upc) == "" {
db := dao.GetDB() skuNameExt.Upc = nil
if skuNameExt.Upc != "" {
err = dao.GetEntity(db, &skuNameExt.SkuName, "Upc")
if err == nil {
return nil, fmt.Errorf("UPC:%s重复", skuNameExt.Upc)
} else if !dao.IsNoRowsError(err) {
return nil, err
}
err = nil
} }
db := dao.GetDB()
// if skuNameExt.Upc != "" {
// err = dao.GetEntity(db, &skuNameExt.SkuName, "Upc")
// if err == nil {
// return nil, fmt.Errorf("UPC:%s重复", skuNameExt.Upc)
// } else if !dao.IsNoRowsError(err) {
// return nil, err
// }
// err = nil
// }
skuNameExt.SkuName.Status = model.SkuStatusNormal skuNameExt.SkuName.Status = model.SkuStatusNormal
if skuNameExt.IsSpu == 1 { if skuNameExt.IsSpu == 1 {
return nil, fmt.Errorf("不允许创建多规格商品") return nil, fmt.Errorf("不允许创建多规格商品")
@@ -789,19 +791,22 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
valid = utils.RemoveGeneralMapKeys(valid, model.FieldSpecQuality, model.FieldSpecUnit) valid = utils.RemoveGeneralMapKeys(valid, model.FieldSpecQuality, model.FieldSpecUnit)
_, hasPlaces := payload["places"] _, hasPlaces := payload["places"]
if len(valid) > 0 || hasPlaces { if len(valid) > 0 || hasPlaces {
globals.SugarLogger.Debugf("UpdateSkuName valid:%s", utils.Format4Output(valid, false)) if upc, _ := valid["Upc"].(string); upc == "" {
if upc, _ := valid["upc"].(string); upc != "" { valid["Upc"] = nil
skuName := &model.SkuName{
Upc: upc,
}
err = dao.GetEntity(db, skuName, "Upc")
if err == nil {
return 0, fmt.Errorf("UPC:%s重复", upc)
} else if !dao.IsNoRowsError(err) {
return 0, err
}
err = nil
} }
globals.SugarLogger.Debugf("UpdateSkuName valid:%s", utils.Format4Output(valid, false))
// if upc, _ := valid["Upc"].(string); upc != "" {
// skuName := &model.SkuName{
// Upc: upc,
// }
// err = dao.GetEntity(db, skuName, "Upc")
// if err == nil {
// return 0, fmt.Errorf("UPC:%s重复", upc)
// } else if !dao.IsNoRowsError(err) {
// return 0, err
// }
// err = nil
// }
for _, imgName := range []string{"img", "img2"} { for _, imgName := range []string{"img", "img2"} {
if valid[imgName] != nil { if valid[imgName] != nil {
if imgStr := utils.Interface2String(valid[imgName]); imgStr != "" { if imgStr := utils.Interface2String(valid[imgName]); imgStr != "" {

View File

@@ -193,9 +193,9 @@ type SkuName struct {
DescImg string `orm:"size(255)" json:"descImg"` // 商品详情图片描述 DescImg string `orm:"size(255)" json:"descImg"` // 商品详情图片描述
// DescImgEbai string `orm:"size(255)" json:"descImgEbai"` // 饿百的商品详情图片描述RTF // DescImgEbai string `orm:"size(255)" json:"descImgEbai"` // 饿百的商品详情图片描述RTF
Upc string `orm:"size(20);index"` Upc *string `orm:"size(20)"`
Status int `orm:"default(1)" json:"status"` // skuname状态取值同sku.Status Status int `orm:"default(1)" json:"status"` // skuname状态取值同sku.Status
IsSpu int8 `orm:"column(is_spu)" json:"isSpu"` // 用于指明是否SKUNAME当成SPU IsSpu int8 `orm:"column(is_spu)" json:"isSpu"` // 用于指明是否SKUNAME当成SPU
JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"` JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
@@ -206,6 +206,7 @@ type SkuName struct {
func (*SkuName) TableUnique() [][]string { func (*SkuName) TableUnique() [][]string {
return [][]string{ return [][]string{
[]string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "IsSpu", "DeletedAt"}, []string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "IsSpu", "DeletedAt"},
// []string{"Upc", "DeletedAt"},
} }
} }

View File

@@ -92,5 +92,14 @@ func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (vali
} }
func IsValueEqual(value1, value2 interface{}) bool { func IsValueEqual(value1, value2 interface{}) bool {
return fmt.Sprint(value1) == fmt.Sprint(value2) return Interface2String(value1) == Interface2String(value2)
}
func Interface2String(value interface{}) (str string) {
valueType := reflect.TypeOf(value)
if valueType.Kind() == reflect.Ptr {
value = reflect.ValueOf(value).Elem()
}
str = fmt.Sprint(value)
return str
} }

View File

@@ -0,0 +1,37 @@
package refutil
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
)
func TestIsValueEqual(t *testing.T) {
for _, v := range [][]interface{}{
[]interface{}{
false,
1,
"1.0",
},
[]interface{}{
true,
"1",
utils.String2Pointer("1"),
},
[]interface{}{
true,
"1",
1,
},
[]interface{}{
true,
int64(100),
int(100),
},
} {
result := IsValueEqual(v[1], v[2])
if result != v[0].(bool) {
t.Fatalf("%v,%v, desired:%v, get:%v", v[1], v[2], v[0], result)
}
}
}