- add SpecQuality and SpecUnit for skuname

- order desc for many query apis
This commit is contained in:
gazebo
2018-10-28 12:27:12 +08:00
parent f7df897bdb
commit 298bb2f617
5 changed files with 63 additions and 16 deletions

View File

@@ -313,7 +313,7 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, params map[string]inter
CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status, ',"createdAt":"', CONCAT(REPLACE(t2.created_at," ","T"),"+08:00"), '","updatedAt":"', CONCAT(REPLACE(t2.updated_at," ","T"),"+08:00"), '","lastOperator":"', t2.last_operator, '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit, '","weight":', t2.weight, ',"jdID":', t2.jd_id, ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id, "}")), "]") skus_str,
CONCAT("[", GROUP_CONCAT(DISTINCT t3.place_code), "]") places_str
` + sql + `
ORDER BY t1.id
ORDER BY t1.id DESC
LIMIT ? OFFSET ?`
pageSize = jxutils.FormalizePageSize(pageSize)
if offset < 0 {
@@ -354,6 +354,14 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
if skuNameExt.CategoryID == 0 {
return nil, errors.New("CategoryID不能为空")
}
if len(skuNameExt.Skus) == 0 {
return nil, errors.New("创建SKU NAME时必须至少创建一个SKU")
} else if skuNameExt.Unit != model.SpecialUnit {
if len(skuNameExt.Skus) != 1 {
return nil, errors.New("不为份的SKU NAME只能有一个SKU")
}
}
db := dao.GetDB()
dao.Begin(db)
defer func() {
@@ -363,6 +371,13 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
}
}()
dao.WrapAddIDCULDEntity(&skuNameExt.SkuName, userName)
if skuNameExt.Unit == model.SpecialUnit {
skuNameExt.SpecQuality = float32(model.SpecialSpecQuality)
skuNameExt.SpecUnit = model.SpecialSpecUnit
} else {
skuNameExt.SpecQuality = skuNameExt.Skus[0].SpecQuality
skuNameExt.SpecUnit = skuNameExt.Skus[0].SpecUnit
}
if err = dao.CreateEntity(db, &skuNameExt.SkuName); err != nil {
dao.Rollback(db)
return nil, err
@@ -407,6 +422,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf
skuName := &model.SkuName{}
skuName.ID = nameID
valid := dao.NormalMakeMapByStructObject(payload, skuName, userName)
valid = utils.RemoveGeneralMapKeys(valid, model.FieldSpecQuality, model.FieldSpecUnit)
if len(valid) > 0 {
db := dao.GetDB()
dao.Begin(db)
@@ -488,6 +504,15 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int
func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) (outSkuNameExt *model.SkuNameExt, err error) {
db := dao.GetDB()
skuName := &model.SkuName{}
skuName.ID = nameID
if err = dao.GetEntity(db, skuName); err != nil {
return nil, err
}
if skuName.Unit != model.SpecialUnit {
return nil, errors.New("不为份的SKU NAME只能有一个SKU")
}
dao.WrapAddIDCULDEntity(sku, userName)
sku.JdSyncStatus = model.SyncFlagNewMask
sku.NameID = nameID
@@ -512,8 +537,22 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
valid := dao.NormalMakeMapByStructObject(payload, sku, userName)
if len(valid) > 0 {
db := dao.GetDB()
dao.Begin(db)
defer func() {
dao.Rollback(db)
}()
if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, valid, userName, nil, model.FieldJdSyncStatus); err == nil {
if num == 1 {
if num, err = dao.ExecuteSQL(db, `
UPDATE sku_name t1
JOIN sku t2 ON t1.id = t2.name_id
SET t1.spec_quality = t2.spec_quality,
t1.spec_unit = t2.spec_unit
WHERE t1.deleted_at = ? AND t2.id = ? AND t1.unit <> ?
`, utils.DefaultTimeValue, skuID, model.SpecialUnit); err != nil {
return 0, err
}
dao.Commit(db)
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, userName)
} else {
err = ErrEntityNotExist

View File

@@ -175,7 +175,7 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa
sql += sqlWhere + `
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
ORDER BY t1.id
ORDER BY t1.id DESC
LIMIT ? OFFSET ?`
pageSize = jxutils.FormalizePageSize(pageSize)
if offset < 0 {

View File

@@ -46,8 +46,8 @@ type StoreSkuBindSkuInfo struct {
// UpdateStoreSku用API调用时
type StoreSkuBindInfo struct {
NameID int `json:"nameID"`
UnitPrice int `json:"unitPrice"`
IsFocus int `json:"isFocus"` // -1不关注0忽略1关注
UnitPrice int `json:"unitPrice"` // 对于是份的SKU就是单价每斤价格其它则为总价
IsFocus int `json:"isFocus"` // -1不关注0忽略1关注
SubStoreID int `json:"subStoreID"`
Skus []*StoreSkuBindSkuInfo `json:"skus"`
}
@@ -193,7 +193,7 @@ func GetStoreSkus(ctx *jxcontext.Context, storeID int, isFocus bool, keyword str
',"price":', IF(t4.price IS NULL, 0, t4.price), ',"unitPrice":', IF(t4.unit_price IS NULL, t1.price, t4.unit_price),
',"storeSkuStatus":', IF(t4.status IS NULL, 0, t4.status), "}")), "]") skus_str
` + sql + `
ORDER BY t1.id
ORDER BY t1.id DESC
LIMIT ? OFFSET ?`
pageSize = jxutils.FormalizePageSize(pageSize)
sqlParams = append(sqlParams, pageSize, offset)

View File

@@ -32,7 +32,9 @@ const (
FieldSkuID = "SkuID"
FieldLevel = "Level"
FieldEnabled = "Enabled"
FieldEnabled = "Enabled"
FieldSpecQuality = "SpecQuality"
FieldSpecUnit = "SpecUnit"
)
type ModelIDCUL struct {

View File

@@ -85,6 +85,10 @@ var (
"虾仁",
"鲜活现宰",
}
SpecialUnit = "份"
SpecialSpecQuality = 500
SpecialSpecUnit = "g"
)
var (
@@ -156,18 +160,20 @@ type SkuName struct {
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo此属性暂时没有使用且有问题应该是不同平台都有一个brandid
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部全国可见如果否的话可见性由SkuPlace决定
Unit string `orm:"size(8)" json:"unit"`
Price int `json:"price"` // 单位为分标准价不为份的就为实际标准价为份的为每市斤价实际还要乘质量。todo 为份的确定必须有质量
Img string `orm:"size(255)" json:"img"`
ElmImgHashCode string `orm:"size(255)" json:"-"` // 长度255的原因是从京东初始化数据时临时需要
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部全国可见如果否的话可见性由SkuPlace决定
Unit string `orm:"size(8)" json:"unit"`
SpecQuality float32 `json:"-"` // 为份必然为500这个主要作用只是用于确保SkuName的唯一性
SpecUnit string `orm:"size(8)" json:"-"` // 为份必然为克这个主要作用只是用于确保SkuName的唯一性
Price int `json:"price"` // 单位为分标准价不为份的就为实际标准价为份的为每市斤价实际还要乘质量。todo 为份的确定必须有质量
Img string `orm:"size(255)" json:"img"`
ElmImgHashCode string `orm:"size(255)" json:"-"` // 长度255的原因是从京东初始化数据时临时需要
}
// func (*SkuName) TableUnique() [][]string {
// return [][]string{
// []string{"Name", "Prefix", "Unit"},
// }
// }
func (*SkuName) TableUnique() [][]string {
return [][]string{
[]string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit"},
}
}
type Sku struct {
ModelIDCULD