- GetStoresSkusNew, 重新实现GetStoresSkus

This commit is contained in:
gazebo
2019-06-27 16:08:16 +08:00
parent 77b25b6329
commit 537d730a2c
2 changed files with 295 additions and 40 deletions

View File

@@ -33,6 +33,45 @@ const (
// CopyStoreSkuModeAdd = "add" // CopyStoreSkuModeAdd = "add"
) )
type StoreSkuExt struct {
NameID int `orm:"column(name_id)" json:"nameID"`
SkuID int `orm:"column(sku_id)" json:"id"`
Comment string `orm:"size(255)" json:"comment"`
SkuCategoryID int `orm:"column(sku_category_id)" json:"categoryID"`
SkuSpecQuality float32 `json:"specQuality"`
SkuSpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
Weight int `json:"weight"` // 重量/质量单位为克当相应的SkuName的SpecUnit为g或kg时必须等于SpecQuality
JdID int64 `orm:"column(sku_jd_id);null;index" json:"jdID"`
SkuStatus int `json:"status"`
BindCreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"`
BindUpdatedAt time.Time `orm:"auto_now;type(datetime)" json:"updatedAt"`
BindLastOperator string `orm:"size(32)" json:"lastOperator"` // 最后操作员
BindDeletedAt time.Time `orm:"type(datetime);default('1970-01-01 00:00:00')" json:"deletedAt"`
SubStoreID int `orm:"column(sub_store_id)" json:"subStoreID"`
BindPrice int `json:"price"` // 单位为分不用int64的原因是这里不需要累加
UnitPrice int `json:"unitPrice"` // 这个是一斤的门店商品价放在这里的原因是避免额外增加一张store sku_name表逻辑上要保证同一SKU NAME中的所有SKU这个字段的数据一致
BindStatus int `json:"storeSkuStatus"`
EbaiID int64 `orm:"column(ebai_id);index" json:"ebaiID"`
MtwmID int64 `orm:"column(mtwm_id)" json:"mtwmID"` // 这个也不是必须的只是为了DAO取数据语句一致
WscID int64 `orm:"column(wsc_id);index" json:"wscID"` // 表示微盟skuId
WscID2 int64 `orm:"column(wsc_id2);index" json:"wscID2"` // 表示微盟goodsId
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
EbaiSyncStatus int8 `orm:"default(2)" json:"ebaiSyncStatus"`
MtwmSyncStatus int8 `orm:"default(2)" json:"mtwmSyncStatus"`
WscSyncStatus int8 `orm:"default(2)" json:"wscSyncStatus"`
ActPrice int `json:"actPrice"`
EarningPrice int `json:"earningPrice"`
RealEarningPrice int `json:"realEarningPrice"`
Count int `json:"count"`
Times int `json:"times"`
}
// GetStoreSkus用 // GetStoreSkus用
type StoreSkuNameExt struct { type StoreSkuNameExt struct {
StoreID int `orm:"column(store_id)" json:"storeID"` StoreID int `orm:"column(store_id)" json:"storeID"`
@@ -40,7 +79,8 @@ type StoreSkuNameExt struct {
model.SkuName model.SkuName
UnitPrice int `json:"unitPrice"` UnitPrice int `json:"unitPrice"`
Skus []map[string]interface{} `orm:"-" json:"skus"` Skus []map[string]interface{} `orm:"-" json:"skus2,omitempty"`
Skus2 []*StoreSkuExt `orm:"-" json:"skus,omitempty"`
SkusStr string `json:"-"` SkusStr string `json:"-"`
PendingOpType int8 `json:"pendingOpType"` // 取值同 StoreOpRequest.Type PendingOpType int8 `json:"pendingOpType"` // 取值同 StoreOpRequest.Type
@@ -100,30 +140,18 @@ type StoreOpRequestInfo struct {
UnitPrice int `json:"unitPrice"` UnitPrice int `json:"unitPrice"`
} }
// 待用于新的GetStoresSkus实现 type tStoreNameBind struct {
type tSkuInfo struct { StoreID int `orm:"column(store_id)"`
ID int `orm:"column(sku_id)" json:"id"` NameID int `orm:"column(name_id)"`
CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"` Name string
UpdatedAt time.Time `orm:"auto_now;type(datetime)" json:"updatedAt"` }
LastOperator string `orm:"size(32)" json:"lastOperator"` // 最后操作员
DeletedAt time.Time `orm:"type(datetime);default('1970-01-01 00:00:00')" json:"deletedAt"`
CategoryID int `orm:"column(category_id)" json:"categoryID"` // 特殊类别,一般用于秒杀,特价之类的特殊类别 type tGetStoresSkusInfo struct {
NameID int `orm:"column(name_id)" json:"nameID"` // todo 这个索引应该要求唯一 StoreID int `orm:"column(store_id)"`
SkuIndex int `json:"-"` StoreName string
Comment string `orm:"size(255)" json:"comment"`
SpecQuality float32 `json:"specQuality"`
SpecUnit string `orm:"size(8)" json:"specUnit"` // 质量或容量
Weight int `json:"weight"` // 重量/质量单位为克当相应的SkuName的SpecUnit为g或kg时必须等于SpecQuality
Status int `json:"status"`
JdID int64 `orm:"column(jd_id);null;index" json:"jdID"` model.SkuName
EbaiID int64 `orm:"column(ebai_id);index"` StoreSkuExt
MtwmID string `orm:"column(mtwm_id);index;size(16)"` // 美团外卖没有ID保存名字
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
EbaiSyncStatus int8 `orm:"default(2)"`
MtwmSyncStatus int8 `orm:"default(2)"`
} }
const ( const (
@@ -139,7 +167,8 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
sql = ` sql = `
FROM sku_name t1 FROM sku_name t1
JOIN sku t2 ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/ JOIN sku t2 ON t1.id = t2.name_id AND t2.deleted_at = ?/* AND t2.status = ?*/
JOIN store t3 ON t3.id IN (` + dao.GenQuestionMarks(len(storeIDs)) + `)` JOIN store t3 ON t3.deleted_at = ?
`
if !isFocus { if !isFocus {
sql += " LEFT" sql += " LEFT"
} }
@@ -151,7 +180,7 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
sqlParams = []interface{}{ sqlParams = []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,
// model.SkuStatusNormal, // model.SkuStatusNormal,
storeIDs, utils.DefaultTimeValue,
utils.DefaultTimeValue, utils.DefaultTimeValue,
utils.DefaultTimeValue, utils.DefaultTimeValue,
utils.Bool2Int(isFocus), utils.Bool2Int(isFocus),
@@ -224,6 +253,10 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
sql += " AND t1.unit = ?" sql += " AND t1.unit = ?"
sqlParams = append(sqlParams, params["unit"].(string)) sqlParams = append(sqlParams, params["unit"].(string))
} }
if len(storeIDs) > 0 {
sql += " AND t3.id IN (" + dao.GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
if len(skuIDs) > 0 { if len(skuIDs) > 0 {
sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
sqlParams = append(sqlParams, skuIDs) sqlParams = append(sqlParams, skuIDs)
@@ -269,9 +302,234 @@ func getGetStoresSkusBaseSQL(db *dao.DaoDB, storeIDs, skuIDs []int, isFocus bool
return sql, sqlParams, err return sql, sqlParams, err
} }
func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
return GetStoresSkusNew(ctx, storeIDs, skuIDs, isFocus, keyword, isBySku, params, offset, pageSize)
}
func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
if !isFocus && !isBySku && (len(storeIDs) > 1 || len(storeIDs) == 0) {
return nil, fmt.Errorf("未关注按SkuName只能查询单店")
}
db := dao.GetDB()
sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, params)
if err != nil {
return nil, err
}
pageSize = jxutils.FormalizePageSize(pageSize)
sqlOffset := offset
sqlPageSize := pageSize
isSaleInfo := params["stFromTime"] != nil
if isSaleInfo {
sqlOffset = 0
sqlPageSize = jxutils.FormalizePageSize(-1)
}
sqlParamsPage := []interface{}{sqlPageSize, sqlOffset}
dao.Begin(db)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
skuNamesInfo = &StoreSkuNamesInfo{}
if !isBySku {
sql2 := `
SELECT SQL_CALC_FOUND_ROWS
t3.id store_id, t1.id name_id
` + sql + `
GROUP BY 1, 2
ORDER BY 1, 2
LIMIT ? OFFSET ?
`
sqlParams2 := append([]interface{}{}, sqlParams...)
sqlParams2 = append(sqlParams2, sqlParamsPage)
var storeNameList []*tStoreNameBind
beginTime := time.Now()
if err = dao.GetRows(db, &storeNameList, sql2, sqlParams2...); err != nil {
dao.Rollback(db)
return nil, err
}
globals.SugarLogger.Debug(time.Now().Sub(beginTime))
skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
sql += " AND (1 = 0"
for _, v := range storeNameList {
sql += " OR (t1.id = ? AND t3.id = ?)"
sqlParams = append(sqlParams, v.NameID, v.StoreID)
}
sql += `)
ORDER BY t3.id, t2.name_id, t2.id
`
} else {
if isFocus {
sql += `
ORDER BY t3.id, t2.name_id, t2.id
`
}
sql += `
LIMIT ? OFFSET ?
`
sqlParams = append(sqlParams, sqlParamsPage)
}
sql = `
SELECT SQL_CALC_FOUND_ROWS
t3.id store_id, t3.name store_name, t3.pay_percentage,
t1.*,
t2.name_id, t2.id sku_id, t2.spec_quality sku_spec_quality, t2.spec_unit sku_spec_unit, t2.weight, t2.jd_id sku_jd_id,
t2.comment, t2.category_id sku_category_id, t2.status sku_status,
t4.created_at bind_created_at, t4.updated_at bind_updated_at, t4.last_operator bind_last_operator, t4.deleted_at bind_deleted_at,
t4.sub_store_id, t4.price bind_price, IF(t4.unit_price IS NOT NULL, t4.unit_price, t1.price) unit_price, t4.status bind_status,
t4.ebai_id, t4.mtwm_id, t4.wsc_id, t4.wsc_id2,
t4.jd_sync_status, t4.ebai_sync_status, t4.mtwm_sync_status, t4.wsc_sync_status
` + sql
var tmpList []*tGetStoresSkusInfo
beginTime := time.Now()
if err = dao.GetRows(db, &tmpList, sql, sqlParams...); err != nil {
dao.Rollback(db)
return nil, err
}
if isBySku {
skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
}
dao.Commit(db)
globals.SugarLogger.Debug(time.Now().Sub(beginTime))
storeNameMap := make(map[int64]*StoreSkuNameExt)
for _, v := range tmpList {
var storeName *StoreSkuNameExt
index := jxutils.Combine2Int(v.StoreID, v.ID)
if isBySku || storeNameMap[index] == nil {
storeName = &StoreSkuNameExt{
StoreID: v.StoreID,
StoreName: v.StoreName,
SkuName: v.SkuName,
UnitPrice: v.UnitPrice,
}
if !isBySku {
storeNameMap[index] = storeName
}
skuNamesInfo.SkuNames = append(skuNamesInfo.SkuNames, storeName)
} else {
storeName = storeNameMap[index]
}
storeName.Skus2 = append(storeName.Skus2, &v.StoreSkuExt)
}
err = updateActPrice4StoreSkuName(db, storeIDs, skuIDs, skuNamesInfo)
if err == nil && isSaleInfo {
err = updateSaleInfo4StoreSkuName(ctx, db, offset, pageSize, params, skuNamesInfo)
}
// globals.SugarLogger.Debug(utils.Format4Output(skuNamesInfo, false))
return skuNamesInfo, err
}
func updateActPrice4StoreSkuName(db *dao.DaoDB, storeIDs, skuIDs []int, skuNamesInfo *StoreSkuNamesInfo) (err error) {
// 活动商品信息
jxSkuPriceMap, err := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now())
if err != nil {
globals.SugarLogger.Errorf("updateActPrice4StoreSkuName can not get sku promotion info for error:%v", err)
return err
}
jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now())
if err = err2; err != nil {
globals.SugarLogger.Errorf("updateActPrice4StoreSkuName can not get sku promotion info for error:%v", err)
return err
}
for _, skuName := range skuNamesInfo.SkuNames {
if len(skuName.Skus2) > 0 {
for _, v := range skuName.Skus2 {
index := dao.GenSkuPriceMapKey(skuName.StoreID, v.SkuID)
if jdSkuPriceMap[index] != nil {
v.ActPrice = jdSkuPriceMap[index].Price
}
if jxSkuPriceMap[index] != nil {
v.EarningPrice = jxSkuPriceMap[index].EarningPrice
}
v.RealEarningPrice = v.EarningPrice
if v.RealEarningPrice == 0 {
v.RealEarningPrice = int(jxutils.CaculateSkuEarningPrice(int64(v.BindPrice), int64(v.BindPrice), skuName.PayPercentage))
}
}
} else {
skuName.UnitPrice = skuName.Price
}
}
return err
}
func updateSaleInfo4StoreSkuName(ctx *jxcontext.Context, db *dao.DaoDB, offset, pageSize int, params map[string]interface{}, skuNamesInfo *StoreSkuNamesInfo) (err error) {
var (
saleInfoList []*SkuSaleInfo
timeList []time.Time
fromCount, toCount int
)
storeIDMap := make(map[int]int)
skuIDMap := make(map[int]int)
saleInfoMap := make(map[int64]*SkuSaleInfo)
for _, skuName := range skuNamesInfo.SkuNames {
storeIDMap[skuName.StoreID] = 1
for _, sku := range skuName.Skus2 {
skuIDMap[sku.SkuID] = 1
}
}
storeIDs := jxutils.IntMap2List(storeIDMap)
skuIDs := jxutils.IntMap2List(skuIDMap)
toTimeStr := ""
if params["stToTime"] != nil {
toTimeStr = params["stToTime"].(string)
}
if timeList, err = jxutils.BatchStr2Time(params["stFromTime"].(string), toTimeStr); err != nil {
return err
}
if params["stFromCount"] != nil {
fromCount = params["stFromCount"].(int)
}
toCount = math.MaxInt32
if params["stToCount"] != nil {
toCount = params["stToCount"].(int)
}
// 不能用SQL筛除否则不能区分是没有销量还是不在条件中
if saleInfoList, err = GetStoresSkusSaleInfo(ctx, storeIDs, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); err != nil {
return err
}
for _, saleInfo := range saleInfoList {
saleInfoMap[jxutils.Combine2Int(saleInfo.StoreID, saleInfo.SkuID)] = saleInfo
}
var newSkuNames []*StoreSkuNameExt
for _, skuName := range skuNamesInfo.SkuNames {
var newSkus []*StoreSkuExt
for _, sku := range skuName.Skus2 {
saleInfo := saleInfoMap[jxutils.Combine2Int(skuName.StoreID, sku.SkuID)]
if saleInfo == nil && fromCount == 0 {
saleInfo = &SkuSaleInfo{}
}
if saleInfo != nil && saleInfo.Count >= fromCount && saleInfo.Count <= toCount {
sku.Times = saleInfo.Times
sku.Count = saleInfo.Count
newSkus = append(newSkus, sku)
}
}
if len(newSkus) > 0 {
skuName.Skus2 = newSkus
newSkuNames = append(newSkuNames, skuName)
}
}
skuNamesInfo.TotalCount = len(newSkuNames)
skuNamesInfo.SkuNames = nil
if offset < skuNamesInfo.TotalCount {
endIndex := offset + pageSize
if endIndex > skuNamesInfo.TotalCount {
endIndex = skuNamesInfo.TotalCount
}
skuNamesInfo.SkuNames = newSkuNames[offset:endIndex]
}
return err
}
// 商品不可售,直接排除 // 商品不可售,直接排除
// 如果门店商品是可售状态,那么会忽略区域限制。否则有区域限制 // 如果门店商品是可售状态,那么会忽略区域限制。否则有区域限制
func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { func GetStoresSkusOld(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
db := dao.GetDB() db := dao.GetDB()
sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, params) sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, params)
if err != nil { if err != nil {
@@ -355,24 +613,22 @@ func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool,
// globals.SugarLogger.Debug(sqlData, sqlParams) // globals.SugarLogger.Debug(sqlData, sqlParams)
if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil { if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil {
skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db) skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
dao.Commit(db)
// 活动商品信息 // 活动商品信息
jxSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now()) jxSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now())
if err = err2; err != nil { if err = err2; err != nil {
dao.Rollback(db)
globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err) globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err)
return nil, err return nil, err
} }
jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now()) jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now())
if err = err2; err != nil { if err = err2; err != nil {
dao.Rollback(db)
globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err) globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err)
return nil, err return nil, err
} }
for _, skuName := range skuNamesInfo.SkuNames { for _, skuName := range skuNamesInfo.SkuNames {
if skuName.SkusStr != "" { if skuName.SkusStr != "" {
if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil { if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
dao.Rollback(db)
return nil, err return nil, err
} }
if len(skuName.Skus) > 0 { if len(skuName.Skus) > 0 {
@@ -423,7 +679,6 @@ func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool,
toTimeStr = params["stToTime"].(string) toTimeStr = params["stToTime"].(string)
} }
if timeList, err = jxutils.BatchStr2Time(params["stFromTime"].(string), toTimeStr); err != nil { if timeList, err = jxutils.BatchStr2Time(params["stFromTime"].(string), toTimeStr); err != nil {
dao.Rollback(db)
return nil, err return nil, err
} }
if params["stFromCount"] != nil { if params["stFromCount"] != nil {
@@ -435,7 +690,6 @@ func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool,
} }
// 不能用SQL筛除否则不能区分是没有销量还是不在条件中 // 不能用SQL筛除否则不能区分是没有销量还是不在条件中
if saleInfoList, err = GetStoresSkusSaleInfo(ctx, storeIDs, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); err != nil { if saleInfoList, err = GetStoresSkusSaleInfo(ctx, storeIDs, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); err != nil {
dao.Rollback(db)
return nil, err return nil, err
} }
for _, saleInfo := range saleInfoList { for _, saleInfo := range saleInfoList {
@@ -494,8 +748,9 @@ func GetStoresSkus(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool,
} }
} }
} }
} else {
dao.Rollback(db)
} }
dao.Commit(db)
return skuNamesInfo, err return skuNamesInfo, err
} }
@@ -582,7 +837,6 @@ func GetStoresSkusSaleInfo(ctx *jxcontext.Context, storeIDs []int, skuIDs []int,
FROM order_sku t1 FROM order_sku t1
JOIN goods_order t2 ON t1.vendor_order_id = t2.vendor_order_id AND t1.vendor_id = t2.vendor_id AND t2.status = ? JOIN goods_order t2 ON t1.vendor_order_id = t2.vendor_order_id AND t1.vendor_id = t2.vendor_id AND t2.status = ?
WHERE t1.order_created_at >= ? AND t1.order_created_at <= ? WHERE t1.order_created_at >= ? AND t1.order_created_at <= ?
AND IF(t2.jx_store_id <> 0, jx_store_id, store_id) IN (` + dao.GenQuestionMarks(len(storeIDs)) + `)
` `
if utils.IsTimeZero(toTime) { if utils.IsTimeZero(toTime) {
toTime = time.Now() toTime = time.Now()
@@ -591,7 +845,12 @@ func GetStoresSkusSaleInfo(ctx *jxcontext.Context, storeIDs []int, skuIDs []int,
model.OrderStatusFinished, model.OrderStatusFinished,
fromTime, fromTime,
toTime, toTime,
storeIDs, }
if len(storeIDs) > 0 {
sql += `
AND IF(t2.jx_store_id <> 0, jx_store_id, store_id) IN (` + dao.GenQuestionMarks(len(storeIDs)) + `)
`
sqlParams = append(sqlParams, storeIDs)
} }
if len(skuIDs) > 0 { if len(skuIDs) > 0 {
sql += ` sql += `
@@ -709,11 +968,7 @@ func checkStoresSkusSaleCity(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs []i
return nil return nil
} }
sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")" sql += " AND t2.id IN (" + dao.GenQuestionMarks(len(nameIDs)) + ")"
var invalidList []*struct { var invalidList []*tStoreNameBind
StoreID int `orm:"column(store_id)"`
NameID int `orm:"column(name_id)"`
Name string
}
if err = dao.GetRows(db, &invalidList, sql, utils.DefaultTimeValue, storeIDs, nameIDs); err == nil { if err = dao.GetRows(db, &invalidList, sql, utils.DefaultTimeValue, storeIDs, nameIDs); err == nil {
if len(invalidList) > 0 { if len(invalidList) > 0 {
errMsg := "" errMsg := ""

View File

@@ -59,7 +59,7 @@ func (c *StoreSkuController) GetStoreSkus() {
// @Title 得到商家商品信息 // @Title 得到商家商品信息
// @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等) // @Description 得到商家商品信息,如下条件之间是与的关系。对于没有认领的商品,按城市限制。但对于已经认领的商品就不限制了,因为已经在平台上可售,可以操作(改价等等)
// @Param token header string true "认证token" // @Param token header string true "认证token"
// @Param storeIDs query string true "门店ID" // @Param storeIDs query string false "门店ID"
// @Param isFocus query bool true "是否已关注(认领)" // @Param isFocus query bool true "是否已关注(认领)"
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)" // @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
// @Param nameIDs query string false "SkuName ID列表对象" // @Param nameIDs query string false "SkuName ID列表对象"