价格统计

This commit is contained in:
苏尹岚
2020-01-02 17:49:57 +08:00
parent 7b8d37a6bd
commit 299dc1a883
3 changed files with 67 additions and 16 deletions

View File

@@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"math" "math"
"sort"
"time" "time"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
@@ -61,6 +62,7 @@ func StatisticsReportForStoreSkusPrice(ctx *jxcontext.Context, cityCodes, skuIDs
} }
func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
var priceReferSnapshotList []*model.PriceReferSnapshot
db := dao.GetDB() db := dao.GetDB()
snapshotAt := utils.Time2Date(time.Now().AddDate(0, 0, -1)) snapshotAt := utils.Time2Date(time.Now().AddDate(0, 0, -1))
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
@@ -93,8 +95,10 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
dao.Commit(db) dao.Commit(db)
} }
case 1: case 1:
priceReferSnapshotList, err = dao.GetPriceReferSnapshotNoPage(db, nil, nil, nil, snapshotAt)
var ( var (
// citySkuMap = make(map[int]map[int][]int) citySkuMap = make(map[int]map[int][]int)
resultMap = make(map[int]map[int]*model.PriceReferSnapshot)
tList []*tStoreSkuBindAndSkuName tList []*tStoreSkuBindAndSkuName
) )
storeList, err := dao.GetStoreList(db, nil, nil, "") storeList, err := dao.GetStoreList(db, nil, nil, "")
@@ -121,6 +125,7 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
AND a.store_id = ? AND a.store_id = ?
AND a.status = ?) AND a.status = ?)
) )
AND a.deleted_at = ?
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
utils.DefaultTimeValue, utils.DefaultTimeValue,
@@ -133,18 +138,68 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
utils.DefaultTimeValue, utils.DefaultTimeValue,
v.ID, v.ID,
model.StoreSkuBindStatusNormal, model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
} }
dao.GetRows(db, &tList, sql, sqlParams...) dao.GetRows(db, &tList, sql, sqlParams...)
// for _, vv := range tList { skuNameMap := make(map[int][]int)
// if citySkuMap[vv.CityCode] != nil { for _, vv := range tList {
if citySkuMap[v.CityCode] != nil {
// } else { if citySkuMap[v.CityCode][vv.NameID] != nil {
// citySkuMap[vv.CityCode] = citySkuMap[v.CityCode][vv.NameID] = append(citySkuMap[v.CityCode][vv.NameID], vv.UnitPrice)
// } } else {
// } citySkuMap[v.CityCode][vv.NameID] = []int{vv.UnitPrice}
} }
} else {
skuNameMap[vv.NameID] = append(skuNameMap[vv.NameID], vv.UnitPrice)
citySkuMap[v.CityCode] = skuNameMap
}
}
}
for k1, v := range citySkuMap {
skuNameMap := make(map[int]*model.PriceReferSnapshot)
for k2, _ := range v {
var midUnitPrice int
var avgUnitPrice int
sort.Ints(v[k2])
if len(v[k2])%2 == 0 {
midUnitPrice = v[k2][len(v[k2])/2-1]
} else {
midUnitPrice = v[k2][len(v[k2])/2]
}
for _, vv := range v[k2] {
avgUnitPrice += vv
}
skuNameMap[k2] = &model.PriceReferSnapshot{
MidUnitPrice: midUnitPrice,
MaxUnitPrice: v[k2][len(v[k2])-1],
MinUnitPrice: v[k2][0],
AvgUnitPrice: avgUnitPrice / len(v[k2]),
}
}
resultMap[k1] = skuNameMap
}
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
if len(priceReferSnapshotList) > 0 {
for _, v := range priceReferSnapshotList {
if resultMap[v.CityCode][v.NameID] != nil {
v.MidUnitPrice = resultMap[v.CityCode][v.NameID].MidUnitPrice
v.MaxUnitPrice = resultMap[v.CityCode][v.NameID].MaxUnitPrice
v.AvgUnitPrice = resultMap[v.CityCode][v.NameID].AvgUnitPrice
v.MaxUnitPrice = resultMap[v.CityCode][v.NameID].MaxUnitPrice
dao.UpdateEntity(db, v, "MidUnitPrice", "MaxUnitPrice", "MinUnitPrice", "AvgUnitPrice")
}
}
}
dao.Commit(db)
case 2: case 2:
priceReferSnapshotList, err := dao.GetPriceReferSnapshotNoPage(db, nil, nil, nil, snapshotAt)
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
if r := recover(); r != nil || err != nil { if r := recover(); r != nil || err != nil {
@@ -168,7 +223,7 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
} }
return result, err return result, err
} }
taskSeq := tasksch.NewSeqTask2("生成每日价格统计", ctx, isContinueWhenError, taskSeqFunc, 4) taskSeq := tasksch.NewSeqTask2("生成每日价格统计", ctx, isContinueWhenError, taskSeqFunc, 3)
tasksch.HandleTask(taskSeq, nil, true).Run() tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync { if !isAsync {
_, err = taskSeq.GetResult(0) _, err = taskSeq.GetResult(0)

View File

@@ -191,10 +191,6 @@ func GetGetStatisticsReportForAfsOrders(db *DaoDB, storeIDs []int, fromDate time
func GetStatisticsReportForStoreSkusPrice(db *DaoDB, cityCodes, skuIDs []int) (priceReferSnapshot []*model.PriceReferSnapshot, err error) { func GetStatisticsReportForStoreSkusPrice(db *DaoDB, cityCodes, skuIDs []int) (priceReferSnapshot []*model.PriceReferSnapshot, err error) {
sql := ` sql := `
SELECT b.city_code,a.sku_id,c.name_id, SELECT b.city_code,a.sku_id,c.name_id,
ROUND(MAX(a.unit_price/IF(b.pay_percentage < 50,70,b.pay_percentage)*100)) max_unit_price,
ROUND(MIN(a.unit_price/IF(b.pay_percentage < 50,70,b.pay_percentage)*100)) min_unit_price,
ROUND(AVG(a.unit_price/IF(b.pay_percentage < 50,70,b.pay_percentage)*100)) avg_unit_price,
ROUND(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT((a.unit_price/IF(b.pay_percentage < 50,70,b.pay_percentage))*100 ORDER BY (a.unit_price/IF(b.pay_percentage < 50,70,b.pay_percentage))*100),',',Count(1)/2),',',-1)) mid_unit_price,
MAX(a.jd_price) max_jd_price, MAX(a.jd_price) max_jd_price,
MIN(a.jd_price) min_jd_price, MIN(a.jd_price) min_jd_price,
ROUND(AVG(a.jd_price)) avg_jd_price, ROUND(AVG(a.jd_price)) avg_jd_price,

View File

@@ -347,7 +347,7 @@ type OrderPayRefund struct {
type OrderSupplementFee struct { type OrderSupplementFee struct {
ModelIDCULD ModelIDCULD
StoreID int `orm:"column(store_id)" json:"storeID"` StoreID int `orm:"column(store_id)" json:"storeID"`
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` VendorOrderID *string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"`
VendorID *string `orm:"column(vendor_id)" json:"vendorID"` VendorID *string `orm:"column(vendor_id)" json:"vendorID"`
Status int `json:"status"` //账单状态,若已结账则不允许再修改 ,暂时 0为未结账1为已结账,-1为作废 Status int `json:"status"` //账单状态,若已结账则不允许再修改 ,暂时 0为未结账1为已结账,-1为作废
LinkID int `orm:"column(link_id)" json:"linkID"` //作为冲账标志关联某条扣款记录 LinkID int `orm:"column(link_id)" json:"linkID"` //作为冲账标志关联某条扣款记录