增加StoreScoreEx结构来获取门店名字,去掉表中的字段StoreName

This commit is contained in:
Rosy-zhudan
2019-09-10 15:42:26 +08:00
parent 69c57c6520
commit 40586e19a6
4 changed files with 70 additions and 53 deletions

View File

@@ -10,6 +10,7 @@ import (
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals/refutil"
@@ -63,9 +64,34 @@ var (
}
storeScoreDataWrapper StoreScoreDataWrapper
allStoreSkus map[int]map[int]*cms.StoreSkuNameExt
allStoreSkusWrapper AllStoreSkusWrapper
)
type AllStoreSkusWrapper struct {
allStoreSkus map[int]map[int]*cms.StoreSkuNameExt
locker sync.RWMutex
}
func (a *AllStoreSkusWrapper) InitData() {
a.allStoreSkus = make(map[int]map[int]*cms.StoreSkuNameExt)
}
func (a *AllStoreSkusWrapper) ClearData() {
a.allStoreSkus = nil
}
func (a *AllStoreSkusWrapper) SetData(storeID int, skuMapData map[int]*cms.StoreSkuNameExt) {
a.locker.Lock()
defer a.locker.Unlock()
a.allStoreSkus[storeID] = skuMapData
}
func (a *AllStoreSkusWrapper) GetData(storeID int) map[int]*cms.StoreSkuNameExt {
a.locker.RLock()
defer a.locker.RUnlock()
return a.allStoreSkus[storeID]
}
type StoreScoreDataWrapper struct {
storeScoreData map[int]*model.StoreScore
locker sync.RWMutex
@@ -75,14 +101,13 @@ func (s *StoreScoreDataWrapper) InitData() {
s.storeScoreData = make(map[int]*model.StoreScore)
}
func (s *StoreScoreDataWrapper) SetData(storeID int, storeName, valueName string, value int) {
func (s *StoreScoreDataWrapper) SetData(storeID int, valueName string, value int) {
s.locker.Lock()
defer s.locker.Unlock()
data := s.storeScoreData[storeID]
if data == nil {
data = &model.StoreScore{}
data.StoreID = storeID
data.StoreName = storeName
s.storeScoreData[storeID] = data
}
valueInfo := reflect.ValueOf(data).Elem()
@@ -91,8 +116,9 @@ func (s *StoreScoreDataWrapper) SetData(storeID int, storeName, valueName string
//得到所有门店的商品
func GetAllStoreSkus(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
allStoreSkus = make(map[int]map[int]*cms.StoreSkuNameExt)
for _, storeInfo := range storeList {
allStoreSkusWrapper.InitData()
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeInfo := batchItemList[0].(*cms.StoreExt)
storeID := storeInfo.ID
jxSkuInfoData, _ := cms.GetStoreSkus(ctx, storeID, []int{}, true, "", true, map[string]interface{}{}, 0, -1)
jxSkuMapData := make(map[int]*cms.StoreSkuNameExt)
@@ -104,12 +130,12 @@ func GetAllStoreSkus(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
}
}
}
allStoreSkus[storeID] = jxSkuMapData
allStoreSkusWrapper.SetData(storeID, jxSkuMapData)
return retVal, err
}
}
func ClearAllStoreSkus() {
allStoreSkus = nil
taskParallel := tasksch.NewParallelTask("GetAllStoreSkus", nil, ctx, taskFunc, storeList)
tasksch.HandleTask(taskParallel, nil, true).Run()
taskParallel.GetResult(0)
}
func GetOpenTime(opTimeList []int16) (opTime float64) {
@@ -130,7 +156,6 @@ func GetOpenTime(opTimeList []int16) (opTime float64) {
func ScoreStoreOpenTime(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
storeStatus := storeInfo.Status
isStoreOpen := storeStatus == model.StoreStatusOpened
for _, storeMap := range storeInfo.StoreMaps {
@@ -149,7 +174,7 @@ func ScoreStoreOpenTime(storeList []*cms.StoreExt) {
finalScore = 0
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldStoreOpenTime, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldStoreOpenTime, finalScore)
}
}
}
@@ -159,8 +184,7 @@ func ScoreStoreOpenTime(storeList []*cms.StoreExt) {
func ScoreSaleSkuCount(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
skusMapData := allStoreSkus[storeID]
skusMapData := allStoreSkusWrapper.GetData(storeID)
if len(skusMapData) > 0 {
finalScore := 0
saleSkuCount := 0
@@ -176,7 +200,7 @@ func ScoreSaleSkuCount(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
if finalScore > ItemTotalScore {
finalScore = ItemTotalScore
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldSaleSkuCount, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldSaleSkuCount, finalScore)
}
}
}
@@ -185,7 +209,6 @@ func ScoreSaleSkuCount(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
func ScoreAveragePickupTime(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
db := dao.GetDB()
orderList, err := dao.GetDailyFinishOrderList(db, storeID)
orderListCount := len(orderList)
@@ -206,7 +229,7 @@ func ScoreAveragePickupTime(storeList []*cms.StoreExt) {
}
}
finalScore := totalScore / orderListCount
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldAveragePickupTime, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldAveragePickupTime, finalScore)
}
}
}
@@ -215,7 +238,6 @@ func ScoreAveragePickupTime(storeList []*cms.StoreExt) {
func ScoreBadCommentOrder(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
db := dao.GetDB()
badCommentOrderCount, _ := dao.GetDailyBadCommentOrderCount(db, storeID)
finishOrderCount, _ := dao.GetDailyFinishOrderCount(db, storeID)
@@ -231,7 +253,7 @@ func ScoreBadCommentOrder(storeList []*cms.StoreExt) {
finalScore = 0
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldBadCommentOrder, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldBadCommentOrder, finalScore)
}
}
}
@@ -240,7 +262,6 @@ func ScoreBadCommentOrder(storeList []*cms.StoreExt) {
func ScoreUnfinishOrder(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
db := dao.GetDB()
unFinishOrderCount, _ := dao.GetDailyUnFinishOrderCount(db, storeID)
finishOrderCount, _ := dao.GetDailyFinishOrderCount(db, storeID)
@@ -256,7 +277,7 @@ func ScoreUnfinishOrder(storeList []*cms.StoreExt) {
finalScore = 0
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldUnfinishOrder, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldUnfinishOrder, finalScore)
}
}
}
@@ -265,7 +286,6 @@ func ScoreUnfinishOrder(storeList []*cms.StoreExt) {
func ScoreAbsentGoodsOrder(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
db := dao.GetDB()
absentGoodsOrderCount, _ := dao.GetDailyAbsentGoodsOrderCount(db, storeID)
finishOrderCount, _ := dao.GetDailyFinishOrderCount(db, storeID)
@@ -281,7 +301,7 @@ func ScoreAbsentGoodsOrder(storeList []*cms.StoreExt) {
finalScore = 0
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldAbsentGoodsOrder, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldAbsentGoodsOrder, finalScore)
}
}
}
@@ -290,7 +310,6 @@ func ScoreAbsentGoodsOrder(storeList []*cms.StoreExt) {
func ScorePromotionSku(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
storeID := storeInfo.ID
storeName := storeInfo.Name
db := dao.GetDB()
beginTime := time.Now()
endTime := time.Now()
@@ -313,7 +332,7 @@ func ScorePromotionSku(storeList []*cms.StoreExt) {
finalScore = 0
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldPromotionSku, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldPromotionSku, finalScore)
}
}
}
@@ -324,7 +343,6 @@ func ScoreFullVendor(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
finalScore := 0
storeID := storeInfo.ID
storeName := storeInfo.Name
storeStatus := storeInfo.Status
isStoreOpen := storeStatus == model.StoreStatusOpened
count := 0
@@ -345,7 +363,7 @@ func ScoreFullVendor(storeList []*cms.StoreExt) {
finalScore = ItemTotalScore - decScore
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldFullVendor, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldFullVendor, finalScore)
}
}
@@ -365,7 +383,6 @@ func ScoreStoreRange(storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
finalScore := 0
storeID := storeInfo.ID
storeName := storeInfo.Name
if storeInfo.DeliveryRangeType == model.DeliveryRangeTypePolygon {
points := jxutils.CoordinateStr2Points(storeInfo.DeliveryRange)
area := CalcPolygonArea(points)
@@ -392,7 +409,7 @@ func ScoreStoreRange(storeList []*cms.StoreExt) {
finalScore = ItemTotalScore - int(math.Round(diff*ratio))
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldStoreRange, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldStoreRange, finalScore)
}
}
@@ -419,7 +436,8 @@ func GetStoreSkusAveragePrice(storeList []*cms.StoreExt) map[int]int {
skusAveragePrice := make(map[int]int)
for _, storeInfo := range storeList {
storeID := storeInfo.ID
for _, value := range allStoreSkus[storeID] {
storeSkuMapData := allStoreSkusWrapper.GetData(storeID)
for _, value := range storeSkuMapData {
skuID := value.Skus2[0].SkuID
skuPrice := value.Skus2[0].BindPrice
skusTotalPrice[skuID] += skuPrice
@@ -433,7 +451,8 @@ func GetStoreSkusAveragePrice(storeList []*cms.StoreExt) map[int]int {
}
func GetSkusCountLessEqualAvgPrice(storeID int, skusAveragePrice map[int]int) (count int) {
for _, value := range allStoreSkus[storeID] {
storeSkuMapData := allStoreSkusWrapper.GetData(storeID)
for _, value := range storeSkuMapData {
skuID := value.Skus2[0].SkuID
skuPrice := value.Skus2[0].BindPrice
skuAvgPrice := skusAveragePrice[skuID]
@@ -450,8 +469,7 @@ func ScoreSaleSkuPrice(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
for _, storeInfo := range storeList {
finalScore := 0
storeID := storeInfo.ID
storeName := storeInfo.Name
totalCount := len(allStoreSkus[storeID])
totalCount := len(allStoreSkusWrapper.GetData(storeID))
if totalCount > 0 {
rangeStoreList := GetRangeStoreList(storeID, storeInfo.FloatLng, storeInfo.FloatLat, 5, storeList)
skusAveragePrice := GetStoreSkusAveragePrice(rangeStoreList)
@@ -468,7 +486,7 @@ func ScoreSaleSkuPrice(ctx *jxcontext.Context, storeList []*cms.StoreExt) {
}
}
}
storeScoreDataWrapper.SetData(storeID, storeName, model.FieldSaleSkuPrice, finalScore)
storeScoreDataWrapper.SetData(storeID, model.FieldSaleSkuPrice, finalScore)
}
}
}
@@ -516,7 +534,7 @@ func ScoreStore(ctx *jxcontext.Context, storeIDList []int) (retVal interface{},
ScoreStoreRange(storeList)
ScoreSaleSkuPrice(ctx, storeList)
InsertStoreScore()
ClearAllStoreSkus()
allStoreSkusWrapper.ClearData()
return retVal, err
}
@@ -555,8 +573,8 @@ func Time2Week(t time.Time) int {
return week
}
func SplitToSingleWeekDataList(storeScoreList []*model.StoreScore) (weekDataList [][]*model.StoreScore) {
singelWeekData := []*model.StoreScore{}
func SplitToSingleWeekDataList(storeScoreList []*model.StoreScoreEx) (weekDataList [][]*model.StoreScoreEx) {
singelWeekData := []*model.StoreScoreEx{}
weekIndex := 0
for _, value := range storeScoreList {
if weekIndex == 0 {
@@ -566,7 +584,7 @@ func SplitToSingleWeekDataList(storeScoreList []*model.StoreScore) (weekDataList
singelWeekData = append(singelWeekData, value)
} else {
weekDataList = append(weekDataList, singelWeekData)
singelWeekData = []*model.StoreScore{}
singelWeekData = []*model.StoreScoreEx{}
weekIndex = 0
singelWeekData = append(singelWeekData, value)
}

View File

@@ -75,6 +75,6 @@ type OrderFinancialSkuExt struct {
}
type OrderPickupTime struct {
StatusTime time.Time `orm:"type(datetime)" json:"statusTime"`
PickDeadline time.Time `orm:"type(datetime)" json:"pickDeadline"`
StatusTime time.Time
PickDeadline time.Time
}

View File

@@ -12,17 +12,12 @@ func InsertStoreScore(storeScore *model.StoreScore) error {
return CreateEntity(nil, storeScore)
}
func GetLatestWeeklyStoreScoreList(db *DaoDB, storeID, weekNum int) (storeScoreList []*model.StoreScore, err error) {
// sql := `
// SET @dayInWeek = IF(DAYOFWEEK(CURDATE()) - 1 = 0, 7, DAYOFWEEK(CURDATE()) - 1);
// SET @endDate = DATE_SUB(CURDATE(), INTERVAL @dayInWeek DAY);
// SET @beginData = DATE_SUB(@endDate, INTERVAL ? DAY);
// SELECT * FROM store_score
// WHERE store_id = ? AND DATE(created_at) >= @beginData AND DATE(created_at) <= @endDate ORDER BY created_at DESC
// `
func GetLatestWeeklyStoreScoreList(db *DaoDB, storeID, weekNum int) (storeScoreList []*model.StoreScoreEx, err error) {
sql := `
SELECT * FROM store_score WHERE store_id = ?
AND DATE(created_at) >= DATE_SUB(
SELECT t2.name store_name, t1.* FROM store_score t1
JOIN store t2 ON t1.store_id = t2.id
WHERE store_id = ?
AND DATE(t1.created_at) >= DATE_SUB(
DATE_SUB(
CURDATE(),
INTERVAL
@@ -34,7 +29,7 @@ func GetLatestWeeklyStoreScoreList(db *DaoDB, storeID, weekNum int) (storeScoreL
),
INTERVAL ? DAY
)
AND DATE(created_at) <= DATE_SUB(
AND DATE(t1.created_at) <= DATE_SUB(
CURDATE(),
INTERVAL
IF (

View File

@@ -21,7 +21,6 @@ type StoreScore struct {
ID int `orm:"column(id)" json:"id"`
CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"`
StoreID int `orm:"column(store_id)" json:"storeID"`
StoreName string `orm:"column(store_name)" json:"storeName"`
StoreOpenTime int `orm:"column(store_open_time)" json:"storeOpenTime"`
SaleSkuCount int `orm:"column(sale_sku_count)" json:"saleSkuCount"`
@@ -35,8 +34,13 @@ type StoreScore struct {
SaleSkuPrice int `orm:"column(sale_sku_price)" json:"saleSkuPrice"`
}
type WeeklyStoreScore struct {
type StoreScoreEx struct {
StoreScore
StoreName string `json:"storeName"`
}
type WeeklyStoreScore struct {
StoreScoreEx
BeginTime time.Time `json:"beginTime"`
EndTime time.Time `json:"endTime"`
TotalScore int `json:"totalScore"`