- GetStoresSkusSaleInfo
This commit is contained in:
@@ -63,6 +63,13 @@ type tStoreSkuBindAndSpec struct {
|
||||
RealSkuID int `orm:"column(real_sku_id)"`
|
||||
}
|
||||
|
||||
type SkuSaleInfo struct {
|
||||
StoreID int `orm:"column(store_id)"`
|
||||
SkuID int `orm:"column(sku_id)"`
|
||||
Times int // 销售的次数
|
||||
Count int // 销售的总份数
|
||||
}
|
||||
|
||||
// 商品不可售,直接排除
|
||||
// 如果门店商品是可售状态,那么会忽略区域限制。否则有区域限制
|
||||
func GetStoreSkus(ctx *jxcontext.Context, storeID int, isFocus bool, keyword string, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) {
|
||||
@@ -230,12 +237,105 @@ func GetStoreSkus(ctx *jxcontext.Context, storeID int, isFocus bool, keyword str
|
||||
}
|
||||
}
|
||||
}
|
||||
if params["stFromTime"] != nil {
|
||||
var (
|
||||
saleInfoList []*SkuSaleInfo
|
||||
skuIDs []int
|
||||
timeList []time.Time
|
||||
fromCount, toCount int
|
||||
)
|
||||
saleInfoMap := make(map[int64]*SkuSaleInfo)
|
||||
for _, skuName := range skuNamesInfo.SkuNames {
|
||||
for _, sku := range skuName.Skus {
|
||||
skuIDs = append(skuIDs, int(utils.MustInterface2Int64(sku["id"])))
|
||||
}
|
||||
}
|
||||
toTimeStr := ""
|
||||
if params["stToTime"] != nil {
|
||||
toTimeStr = params["stToTime"].(string)
|
||||
}
|
||||
if timeList, err = jxutils.BatchStr2Time(params["stFromTime"].(string), toTimeStr); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
}
|
||||
// if params["stFromCount"] != nil {
|
||||
// fromCount = params["stFromCount"].(int)
|
||||
// }
|
||||
// if params["stToCount"] != nil {
|
||||
// toCount = params["stToCount"].(int)
|
||||
// }
|
||||
if saleInfoList, err = GetStoresSkusSaleInfo(ctx, []int{storeID}, skuIDs, timeList[0], timeList[1], fromCount, toCount); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
}
|
||||
for _, saleInfo := range saleInfoList {
|
||||
saleInfoMap[int64(saleInfo.StoreID)*100000+int64(saleInfo.SkuID)] = saleInfo
|
||||
}
|
||||
storeID2 := int64(storeID) * 100000
|
||||
// var newSkuNames []*StoreSkuNameExt
|
||||
for _, skuName := range skuNamesInfo.SkuNames {
|
||||
// var newSkus []map[string]interface{}
|
||||
for _, sku := range skuName.Skus {
|
||||
saleInfo := saleInfoMap[storeID2+utils.MustInterface2Int64(sku["id"])]
|
||||
if saleInfo == nil {
|
||||
saleInfo = &SkuSaleInfo{}
|
||||
// newSkus = append(newSkus, sku)
|
||||
}
|
||||
sku["times"] = saleInfo.Times
|
||||
sku["count"] = saleInfo.Count
|
||||
}
|
||||
// skuName.Skus = newSkus
|
||||
// if len(newSkus) > 0 {
|
||||
// newSkuNames = append(newSkuNames, skuName)
|
||||
// }
|
||||
}
|
||||
// skuNamesInfo.SkuNames = newSkuNames
|
||||
}
|
||||
}
|
||||
}
|
||||
dao.Commit(db)
|
||||
return skuNamesInfo, err
|
||||
}
|
||||
|
||||
func GetStoresSkusSaleInfo(ctx *jxcontext.Context, storeIDs []int, skuIDs []int, fromTime, toTime time.Time, fromCount, toCount int) (saleInfoList []*SkuSaleInfo, err error) {
|
||||
db := dao.GetDB()
|
||||
sql := `
|
||||
SELECT IF(t2.jx_store_id <> 0, jx_store_id, store_id) store_id, t1.sku_id, COUNT(*) times, SUM(count) count
|
||||
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 IN (?, ?)
|
||||
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)) + `)
|
||||
AND IF(t1.jx_sku_id <> 0, t1.jx_sku_id, t1.sku_id) IN (` + dao.GenQuestionMarks(len(skuIDs)) + `)
|
||||
`
|
||||
if jxutils.IsTimeEmpty(toTime) {
|
||||
toTime = time.Now()
|
||||
}
|
||||
sqlParams := []interface{}{
|
||||
model.OrderStatusDelivered,
|
||||
model.OrderStatusFinished,
|
||||
fromTime,
|
||||
toTime,
|
||||
storeIDs,
|
||||
skuIDs,
|
||||
}
|
||||
if fromCount > 0 {
|
||||
sql += " AND times >= ?"
|
||||
sqlParams = append(sqlParams, fromCount)
|
||||
}
|
||||
if toCount > 0 {
|
||||
sql += " AND times <= ?"
|
||||
sqlParams = append(sqlParams, toCount)
|
||||
}
|
||||
sql += " GROUP BY 1,2"
|
||||
// fmt.Println(sql)
|
||||
// fmt.Println(utils.Format4Output(sqlParams, false))
|
||||
if err = dao.GetRows(db, &saleInfoList, sql, sqlParams...); err == nil {
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(saleInfoList, false))
|
||||
return saleInfoList, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func UpdateStoreSku(ctx *jxcontext.Context, storeID int, skuBindInfo *StoreSkuBindInfo) (num int64, err error) {
|
||||
return UpdateStoreSkus(ctx, storeID, []*StoreSkuBindInfo{skuBindInfo})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user