价格统计
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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"` //作为冲账标志关联某条扣款记录
|
||||||
|
|||||||
Reference in New Issue
Block a user