Files
jx-callback/business/model/dao/store_sku.go
2018-11-24 12:20:46 +08:00

88 lines
3.2 KiB
Go

package dao
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
)
type SkuStoreCatInfo struct {
model.SkuCategory
CatID int `orm:"column(cat_id)"` // 这个主要用于判断是否有store_sku_category_map
VendorCatID string `orm:"column(vendor_cat_id)"`
CatSyncStatus int8
ParentCatName string
ParentCatID int `orm:"column(parent_cat_id)"` // 这个主要用于判断是否有父store_sku_category_map
ParentVendorCatID string `orm:"column(parent_vendor_cat_id)"`
ParentCatSyncStatus int8
}
type StoreCatSyncInfo struct {
CatName string
Seq int `json:"seq"`
model.StoreSkuCategoryMap
ParentCatName string
ParentCatID int `orm:"column(parent_cat_id)"` // 这个主要用于判断是否有父store_sku_category_map
ParentVendorCatID string `orm:"column(parent_vendor_cat_id)"`
ParentCatSyncStatus int8
}
func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int) (cats []*SkuStoreCatInfo, err error) {
sql := `
SELECT DISTINCT t4.*, t5.category_id cat_id, t5.%s_id vendor_cat_id, t5.%s_sync_status cat_sync_status, t4p.name parent_cat_name, t5p.category_id parent_cat_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
FROM store_sku_bind t1
JOIN sku t2 ON t1.sku_id = t2.id
JOIN sku_name t3 ON t2.name_id = t3.id
`
if level == 2 {
sql += `
JOIN sku_category t4 ON (t3.category_id = t4.id OR t2.category_id = t4.id)
`
} else {
sql += `
JOIN sku_category t4c ON (t3.category_id = t4c.id OR t2.category_id = t4c.id)
JOIN sku_category t4 ON t4.id = t4c.parent_id
`
}
sql += `
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
LEFT JOIN sku_category t4p ON t4.parent_id = t4p.id
LEFT JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5p.store_id = t1.store_id AND t5p.deleted_at = ?
WHERE t1.store_id = ?
`
sqlParams := []interface{}{
storeID,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
}
if len(skuIDs) > 0 {
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
filedPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql = fmt.Sprintf(sql, filedPrefix, filedPrefix, filedPrefix, filedPrefix)
if err = GetRows(db, &cats, sql, sqlParams...); err != nil {
return nil, err
}
return cats, err
}
func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*StoreCatSyncInfo, err error) {
filedPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql := fmt.Sprintf(`
SELECT t5.*, t4.name cat_name, t4.seq, t4p.name parent_cat_name, t5p.category_id parent_cat_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
FROM store_sku_category_map t5
JOIN sku_category t4 ON t5.category_id = t4.id
JOIN sku_category t4p ON t4.parent_id = t4p.id
JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5p.deleted_at = ?
WHERE t5.store_id = ? AND t5.level = ? AND t5.%s_sync_status <> 0
`, filedPrefix, filedPrefix, filedPrefix)
if err = GetRows(db, &cats, sql, utils.DefaultTimeValue, storeID, level); err != nil {
return nil, err
}
return cats, err
}