- use MAX instead of AVG in GetStoreOpRequests for unitPrice
This commit is contained in:
@@ -259,111 +259,108 @@ func GetStoreSkus(ctx *jxcontext.Context, storeID int, isFocus bool, keyword str
|
||||
}()
|
||||
// globals.SugarLogger.Debug(sqlData, sqlParams)
|
||||
if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil {
|
||||
countInfo := &struct{ Ct int }{}
|
||||
if err = dao.GetRow(db, countInfo, "SELECT FOUND_ROWS() ct"); err == nil {
|
||||
skuNamesInfo.TotalCount = countInfo.Ct
|
||||
skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db)
|
||||
for _, skuName := range skuNamesInfo.SkuNames {
|
||||
if skuName.SkusStr != "" {
|
||||
if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
}
|
||||
if len(skuName.Skus) > 0 {
|
||||
skuName.UnitPrice = int(utils.MustInterface2Int64(skuName.Skus[0]["unitPrice"]))
|
||||
for _, v := range skuName.Skus {
|
||||
delete(v, "unitPrice")
|
||||
}
|
||||
} else {
|
||||
skuName.UnitPrice = skuName.Price
|
||||
}
|
||||
}
|
||||
}
|
||||
if isSaleInfo {
|
||||
var (
|
||||
saleInfoList []*SkuSaleInfo
|
||||
skuIDs []int
|
||||
timeList []time.Time
|
||||
fromCount, toCount int
|
||||
)
|
||||
saleInfoMap := make(map[int64]*SkuSaleInfo)
|
||||
for _, skuName := range skuNamesInfo.SkuNames {
|
||||
if skuName.SkusStr != "" {
|
||||
if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil {
|
||||
dao.Rollback(db)
|
||||
return nil, err
|
||||
}
|
||||
if len(skuName.Skus) > 0 {
|
||||
skuName.UnitPrice = int(utils.MustInterface2Int64(skuName.Skus[0]["unitPrice"]))
|
||||
for _, v := range skuName.Skus {
|
||||
delete(v, "unitPrice")
|
||||
}
|
||||
} else {
|
||||
skuName.UnitPrice = skuName.Price
|
||||
}
|
||||
for _, sku := range skuName.Skus {
|
||||
skuIDs = append(skuIDs, int(utils.MustInterface2Int64(sku["id"])))
|
||||
}
|
||||
}
|
||||
if isSaleInfo {
|
||||
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)
|
||||
}
|
||||
toCount = math.MaxInt32
|
||||
if params["stToCount"] != nil {
|
||||
toCount = params["stToCount"].(int)
|
||||
}
|
||||
// 不能用SQL筛除,否则不能区分是没有销量,还是不在条件中
|
||||
if saleInfoList, err = GetStoresSkusSaleInfo(ctx, []int{storeID}, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); 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 && 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)
|
||||
}
|
||||
}
|
||||
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)
|
||||
}
|
||||
toCount = math.MaxInt32
|
||||
if params["stToCount"] != nil {
|
||||
toCount = params["stToCount"].(int)
|
||||
}
|
||||
// 不能用SQL筛除,否则不能区分是没有销量,还是不在条件中
|
||||
if saleInfoList, err = GetStoresSkusSaleInfo(ctx, []int{storeID}, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); 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 && 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.Skus = 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]
|
||||
if len(newSkus) > 0 {
|
||||
skuName.Skus = newSkus
|
||||
newSkuNames = append(newSkuNames, skuName)
|
||||
}
|
||||
}
|
||||
if globals.EnablePendingChange {
|
||||
if isGetOpRequest, ok := params["isGetOpRequest"].(bool); ok && isGetOpRequest {
|
||||
nameIDs := make([]int, len(skuNamesInfo.SkuNames))
|
||||
for k, skuName := range skuNamesInfo.SkuNames {
|
||||
nameIDs[k] = skuName.ID
|
||||
}
|
||||
pagedInfo, err2 := GetStoreOpRequests(ctx, utils.DefaultTimeValue, utils.DefaultTimeValue, "", []int{storeID}, nameIDs, nil, []int{model.RequestStatusNew}, 0, -1)
|
||||
if err = err2; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
requestList := pagedInfo.Data.([]*StoreOpRequestInfo)
|
||||
requestMap := make(map[int]*StoreOpRequestInfo)
|
||||
for _, requestOp := range requestList {
|
||||
requestMap[requestOp.ItemID] = requestOp
|
||||
}
|
||||
for _, skuName := range skuNamesInfo.SkuNames {
|
||||
if requestOp := requestMap[skuName.ID]; requestOp != nil {
|
||||
skuName.PendingUnitPrice = requestOp.IntParam1
|
||||
skuName.PendingOpType = requestOp.Type
|
||||
}
|
||||
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]
|
||||
}
|
||||
}
|
||||
if globals.EnablePendingChange {
|
||||
if isGetOpRequest, ok := params["isGetOpRequest"].(bool); ok && isGetOpRequest {
|
||||
nameIDs := make([]int, len(skuNamesInfo.SkuNames))
|
||||
for k, skuName := range skuNamesInfo.SkuNames {
|
||||
nameIDs[k] = skuName.ID
|
||||
}
|
||||
pagedInfo, err2 := GetStoreOpRequests(ctx, utils.DefaultTimeValue, utils.DefaultTimeValue, "", []int{storeID}, nameIDs, nil, []int{model.RequestStatusNew}, 0, -1)
|
||||
if err = err2; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
requestList := pagedInfo.Data.([]*StoreOpRequestInfo)
|
||||
requestMap := make(map[int]*StoreOpRequestInfo)
|
||||
for _, requestOp := range requestList {
|
||||
requestMap[requestOp.ItemID] = requestOp
|
||||
}
|
||||
for _, skuName := range skuNamesInfo.SkuNames {
|
||||
if requestOp := requestMap[skuName.ID]; requestOp != nil {
|
||||
skuName.PendingUnitPrice = requestOp.IntParam1
|
||||
skuName.PendingOpType = requestOp.Type
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1008,7 +1005,7 @@ func GetStoreOpRequests(ctx *jxcontext.Context, fromTime, toTime time.Time, keyw
|
||||
SELECT SQL_CALC_FOUND_ROWS
|
||||
t1.id, t1.created_at, t1.updated_at, t1.last_operator, t1.deleted_at,
|
||||
t1.type, t1.store_id, t1.item_id, t1.status, t1.user_id, t1.int_param1, t1.int_param2,
|
||||
t2.name store_name, t3.prefix sku_name_prefix, t3.name sku_name_name, AVG(t5.unit_price) unit_price
|
||||
t2.name store_name, t3.prefix sku_name_prefix, t3.name sku_name_name, MAX(t5.unit_price) unit_price
|
||||
FROM store_op_request t1
|
||||
JOIN store t2 ON t1.store_id = t2.id
|
||||
JOIN sku_name t3 ON t1.item_id = t3.id
|
||||
|
||||
Reference in New Issue
Block a user