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 MapID int `orm:"column(map_id)"` // 这个主要用于判断是否有store_sku_category_map VendorCatID string `orm:"column(vendor_cat_id)"` CatSyncStatus int8 ParentCatName string ParentMapID int `orm:"column(parent_map_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 } type StoreSkuSyncInfo struct { BindID int `orm:"column(bind_id)"` Price int64 UnitPrice int64 StoreSkuStatus int SkuSyncStatus int8 model.Sku VendorSkuID string `orm:"column(vendor_sku_id)"` Prefix string NameID int `orm:"column(name_id)"` Name string Unit string Img string Upc string VendorVendorCatID int64 `orm:"column(vendor_vendor_cat_id)"` CatSyncStatus int8 VendorCatID string `orm:"column(vendor_cat_id)"` SkuCatSyncStatus int8 SkuVendorCatID string `orm:"column(sku_vendor_cat_id)"` } // 单门店模式厂商适用 func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int) (cats []*SkuStoreCatInfo, err error) { sql := ` SELECT DISTINCT t4.*, t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status cat_sync_status, t4p.name parent_cat_name, t5p.id parent_map_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) AND t4.level = 2 ` } else { sql += ` LEFT 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 OR (t3.category_id = t4.id OR t2.category_id = t4.id)) AND t4.level = 1 ` } 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.deleted_at = ? AND t1.store_id = ? ` sqlParams := []interface{}{ utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, storeID, } if len(skuIDs) > 0 { sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" sqlParams = append(sqlParams, skuIDs) } fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql = fmt.Sprintf(sql, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix) 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) { fieldPrefix := 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 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 t5.store_id = t5p.store_id AND t5p.deleted_at = ? WHERE t5.store_id = ? AND t4.level = ? AND t5.%s_sync_status <> 0 `, fieldPrefix, fieldPrefix, fieldPrefix) if err = GetRows(db, &cats, sql, utils.DefaultTimeValue, storeID, level); err != nil { return nil, err } return cats, err } // 单门店模式厂商适用 func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*StoreSkuSyncInfo, err error) { tableName := "t1" if model.MultiStoresVendorMap[vendorID] == 1 { // 多店模式平台 tableName = "t2" } imgField := "img" if vendorID == model.VendorIDWSC { imgField = "img_weimob" } sql := ` SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id, t1.%s_sync_status sku_sync_status, t2.*, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.%s img, t3.upc, t4.%s_category_id vendor_vendor_cat_id, t5.%s_sync_status cat_sync_status, t5.%s_id vendor_cat_id, t5sku.%s_sync_status sku_cat_sync_status, t5sku.%s_id sku_vendor_cat_id FROM store_sku_bind t1 JOIN sku t2 ON t1.sku_id = t2.id JOIN sku_name t3 ON t2.name_id = t3.id JOIN sku_category t4 ON t3.category_id = t4.id 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 store_sku_category_map t5sku ON t2.category_id = t5sku.category_id AND t5sku.store_id = t1.store_id AND t5sku.deleted_at = ? WHERE t1.store_id = ? AND t1.%s_sync_status <> 0 ` sqlParams := []interface{}{ utils.DefaultTimeValue, utils.DefaultTimeValue, storeID, } if len(skuIDs) > 0 { sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" sqlParams = append(sqlParams, skuIDs) } fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql = fmt.Sprintf(sql, tableName, fieldPrefix, fieldPrefix, imgField, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix) // globals.SugarLogger.Debug(sql) if err = GetRows(db, &skus, sql, sqlParams...); err != nil { globals.SugarLogger.Debug("fuck") return nil, err } return skus, err } // 多门店模式厂商适用 func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInfo, err error) { globals.SugarLogger.Debugf("GetFullStoreSkus, storeID:%d, vendorID:%d", storeID, vendorID) sql := ` SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t2.%s_id vendor_sku_id, t1.%s_sync_status sku_sync_status, t2.*, t3.id name_id, t3.prefix, t3.name, t3.unit, t3.img, t4.%s_category_id vendor_vendor_cat_id, t4.%s_sync_status cat_sync_status, t4.%s_id vendor_cat_id, t5sku.%s_sync_status sku_cat_sync_status, t5sku.%s_id sku_vendor_cat_id FROM sku t2 LEFT JOIN store_sku_bind t1 ON t1.sku_id = t2.id AND t1.store_id = ? AND t1.deleted_at = ? JOIN sku_name t3 ON t2.name_id = t3.id JOIN sku_category t4 ON t3.category_id = t4.id LEFT JOIN sku_category t5sku ON t2.category_id = t5sku.id WHERE t2.deleted_at = ? ` sqlParams := []interface{}{ storeID, utils.DefaultTimeValue, utils.DefaultTimeValue, } fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql = fmt.Sprintf(sql, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix) // globals.SugarLogger.Debug(sql) // globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false)) if err = GetRows(db, &skus, sql, sqlParams...); err != nil { return nil, err } return skus, err } func SetStoreSkuSyncStatus(db *DaoDB, vendorID, storeID int, skuIDs []int, syncStatus int) (num int64, err error) { globals.SugarLogger.Debugf("SetStoreSkuSyncStatus, storeID:%d, vendorID:%d", storeID, vendorID) fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql := fmt.Sprintf(` UPDATE store_sku_bind SET %s_sync_status = %s_sync_status | ? WHERE deleted_at = ? AND store_id = ? `, fieldPrefix, fieldPrefix) sqlParams := []interface{}{ syncStatus, utils.DefaultTimeValue, storeID, } if len(skuIDs) > 0 { sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" sqlParams = append(sqlParams, skuIDs) } return ExecuteSQL(db, sql, sqlParams...) }