- add SpecQuality and SpecUnit for skuname
- order desc for many query apis
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -32,7 +32,9 @@ const (
|
||||
FieldSkuID = "SkuID"
|
||||
FieldLevel = "Level"
|
||||
|
||||
FieldEnabled = "Enabled"
|
||||
FieldEnabled = "Enabled"
|
||||
FieldSpecQuality = "SpecQuality"
|
||||
FieldSpecUnit = "SpecUnit"
|
||||
)
|
||||
|
||||
type ModelIDCUL struct {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user