Files
jx-callback/business/model/dao/sku.go
2019-12-06 09:41:11 +08:00

218 lines
6.3 KiB
Go

package dao
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/globals"
)
// type SkuStoreCatInfo struct {
// model.SkuCategory
// VendorID int `orm:"column(vendor_id)" json:"vendorID"`
// VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空
// MapID int `orm:"column(map_id)" json:"mapID"`
// VendorCatID string `orm:"size(32);column(vendor_cat_id)" json:"vendorCatID"`
// SyncStatus int8 `orm:"default(2)"`
// VendorParentCatID string `orm:"size(32);column(vendor_parent_cat_id)" json:"vendorParentCatID"`
// }
func GetSellCities(db *DaoDB, nameID int, vendorID int) (cities []*model.Place, err error) {
cities = []*model.Place{}
sql := `
SELECT DISTINCT t3.*
FROM sku_name_place_bind t1
JOIN place t2 ON t1.place_code = t2.code
JOIN place t3 ON (t2.level = 2 AND t2.code = t3.code) OR (t2.level = 1 AND t2.code = t3.parent_code)
WHERE t1.name_id = ?
`
if vendorID == model.VendorIDJD {
sql += "AND t3.jd_code <> 0\n"
}
return cities, GetRows(db, &cities, sql, nameID)
}
func DeleteSkuNamePlace(db *DaoDB, nameID int, placeCodes []int) (num int64, err error) {
sql := `
DELETE
FROM sku_name_place_bind
WHERE name_id = ?
`
sqlParams := []interface{}{
nameID,
}
if len(placeCodes) > 0 {
sql += " AND place_code IN (" + GenQuestionMarks(len(placeCodes)) + ")"
sqlParams = append(sqlParams, placeCodes)
}
return ExecuteSQL(db, sql, sqlParams...)
}
func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*model.SkuAndName, err error) {
sql := `
SELECT t1.*, t2.name, t2.unit, t2.prefix, t2.is_spu
FROM sku t1
JOIN sku_name t2 ON t2.id = t1.name_id AND t2.deleted_at = ?
`
sqlWhere := `
WHERE t1.deleted_at = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
utils.DefaultTimeValue,
}
if len(skuIDs) > 0 {
sqlWhere += " AND t1.id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
if len(nameIDs) > 0 {
sqlWhere += " AND t1.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
sqlParams = append(sqlParams, nameIDs)
}
if len(statuss) > 0 {
sqlWhere += " AND t1.status IN (" + GenQuestionMarks(len(statuss)) + ") AND t2.status IN (" + GenQuestionMarks(len(statuss)) + ")"
sqlParams = append(sqlParams, statuss, statuss)
}
if len(catIDs) > 0 {
sql += `
JOIN sku_category t3 ON t3.id = t2.category_id
LEFT JOIN sku_category t3p ON t3p.id = t3.parent_id
`
sqlWhere += " AND (t3.id IN (" + GenQuestionMarks(len(catIDs)) + ")"
sqlWhere += " OR t3p.id IN (" + GenQuestionMarks(len(catIDs)) + ") )"
sqlParams = append(sqlParams, catIDs, catIDs)
}
sql += sqlWhere
if err = GetRows(db, &skuList, sql, sqlParams...); err == nil {
return skuList, nil
}
return nil, err
}
func GetSkuNames(db *DaoDB, nameIDs []int) (skuNameList []*model.SkuName, err error) {
sql := `
SELECT *
FROM sku_name t1
WHERE t1.deleted_at = ?
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
}
if len(nameIDs) > 0 {
sql += " AND t1.id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
sqlParams = append(sqlParams, nameIDs)
}
if err = GetRows(db, &skuNameList, sql, sqlParams...); err == nil {
return skuNameList, nil
}
return nil, err
}
func GetSkuIDByNames(db *DaoDB, nameIDs []int) (skuIDs []int, err error) {
skuList, err := GetSkus(db, nil, nameIDs, nil, nil)
if err == nil {
for _, sku := range skuList {
skuIDs = append(skuIDs, sku.ID)
}
}
return skuIDs, err
}
func GetSkuByCats(db *DaoDB, catIDs []int) (skuList []*model.Sku, err error) {
skuExList, err := GetSkus(db, nil, nil, nil, catIDs)
if err == nil {
for _, v := range skuExList {
skuList = append(skuList, &v.Sku)
}
}
return skuList, err
}
func SetSkuSyncStatus(db *DaoDB, vendorID int, skuIDs []int, syncStatus int) (num int64, err error) {
globals.SugarLogger.Debugf("SetSkuSyncStatus, vendorID:%d", vendorID)
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
sql := fmt.Sprintf(`
UPDATE sku t1
SET t1.%s_sync_status = IF(t1.deleted_at = ?, t1.%s_sync_status | ?, 0)
`, fieldPrefix, fieldPrefix)
sqlParams := []interface{}{
utils.DefaultTimeValue,
syncStatus,
}
if (syncStatus & model.SyncFlagNewMask) != 0 {
sql += fmt.Sprintf(`,
t1.%s_id = 0
`, fieldPrefix)
}
sql += " WHERE 1 = 1"
if len(skuIDs) > 0 {
sql += " AND t1.id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs)
}
return ExecuteSQL(db, sql, sqlParams...)
}
func GetSkuCategoryWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, parentCatID int, catIDs []int, mustDirty bool) (catList []*SkuStoreCatInfo, err error) {
sql := `
SELECT
t1m.vendor_id, t1m.vendor_org_code,
t1m.id map_id,
t1.*,
t1m.vendor_thing_id vendor_cat_id,
t1m.sync_status cat_sync_status,
t1pm.id parent_map_id,
t1pm.t1p.name parent_cat_name
t1pm.vendor_thing_id parent_vendor_cat_id,
t1pm.sync_status parent_cat_sync_status
/*
t1.jd_sync_status sync_status,
t1.jd_id vendor_cat_id,
t1p.jd_id vendor_parent_cat_id
*/
FROM sku_category t1
LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ?
LEFT JOIN sku_category t1p ON t1p.id = t1.parent_id
LEFT JOIN thing_map t1pm ON t1pm.thing_id = t1p.id AND t1pm.thing_type = ? AND t1m.deleted_at = ?
AND t1pm.vendor_id = t1m.vendor_id AND t1pm.vendor_org_code = t1m.vendor_org_code
WHERE 1 = 1
`
sqlParams := []interface{}{
model.ThingTypeCategory,
utils.DefaultTimeValue,
model.ThingTypeCategory,
utils.DefaultTimeValue,
}
if mustDirty {
sql += " AND t1m.sync_status <> 0"
} else {
sql += " AND t1.deleted_at = ?"
sqlParams = append(sqlParams, utils.DefaultTimeValue)
}
if len(vendorIDs) > 0 {
sql += " AND t1m.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
sqlParams = append(sqlParams, vendorIDs)
}
if len(appOrgCodes) > 0 {
sql += " AND t1m.vendor_org_code IN (" + GenQuestionMarks(len(appOrgCodes)) + ")"
sqlParams = append(sqlParams, appOrgCodes)
}
if len(catIDs) > 0 {
sql += " AND t1.id IN (" + GenQuestionMarks(len(catIDs)) + ")"
sqlParams = append(sqlParams, catIDs)
}
if parentCatID >= 0 {
sql += " AND t1.parent_id = ?"
sqlParams = append(sqlParams, parentCatID)
}
sql += " ORDER BY t1.seq"
err = GetRows(db, &catList, sql, sqlParams...)
return catList, err
}