门店红线-写入和统计数据

This commit is contained in:
Rosy-zhudan
2019-09-30 10:45:29 +08:00
parent b9e0145cd5
commit ec6565992f
4 changed files with 120 additions and 18 deletions

View File

@@ -6,10 +6,10 @@ import (
"reflect" "reflect"
"time" "time"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxstore/cms" "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/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg" "git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg"
"git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model"
@@ -32,6 +32,10 @@ const (
AlertTypeStandardFinishTimeOrderSelfDelivery = 3 AlertTypeStandardFinishTimeOrderSelfDelivery = 3
AlertTypeStandardPickUpTimeOrderDaDa = 4 AlertTypeStandardPickUpTimeOrderDaDa = 4
ColorRed = "red"
ColorYellow = "yellow"
ColorUnknown = "Unknown"
OneDayName = "单日" OneDayName = "单日"
OneWeekDayName = "七日" OneWeekDayName = "七日"
OneMonthDayName = "三十日" OneMonthDayName = "三十日"
@@ -206,6 +210,35 @@ func SendAlertInfo(storeID int, storeName, alertInfo string) {
} }
} }
func GetFieldNameByAlertType(alertType, dayNum int) (fieldName string) {
switch alertType {
case AlertTypePickTimeOrderDaDa:
if dayNum == CheckStoreAlertOneDayNum {
fieldName = model.FieldPickTimeDaDa
} else if dayNum == CheckStoreAlertOneWeekDayNum {
fieldName = model.FieldPickTimeDaDaOneWeek
}
case AlertTypeBadCommentOrder:
if dayNum == CheckStoreAlertOneDayNum {
fieldName = model.FieldBadComment
} else if dayNum == CheckStoreAlertOneWeekDayNum {
fieldName = model.FieldBadCommentOneWeek
}
case AlertTypeAbsentGoodsOrder:
if dayNum == CheckStoreAlertOneDayNum {
fieldName = model.FieldAbsentGoods
} else if dayNum == CheckStoreAlertOneWeekDayNum {
fieldName = model.FieldAbsentGoodsOneWeek
}
case AlertTypeStandardFinishTimeOrderSelfDelivery:
fieldName = model.FieldStandardFinishTimeSelfDelivery
case AlertTypeStandardPickUpTimeOrderDaDa:
fieldName = model.FieldStandardPickUpTimeDaDa
}
return fieldName
}
func SendAlertInfoWrapper(storeID int, storeName string, dayNum, alertType, count, totalCount int) { func SendAlertInfoWrapper(storeID int, storeName string, dayNum, alertType, count, totalCount int) {
if totalCount > 0 { if totalCount > 0 {
ratio := int(math.Round(float64(count) * 100 / float64(totalCount))) ratio := int(math.Round(float64(count) * 100 / float64(totalCount)))
@@ -216,7 +249,8 @@ func SendAlertInfoWrapper(storeID int, storeName string, dayNum, alertType, coun
if isAlert { if isAlert {
alertInfo := GetAlertInfo(dayNum, isRedAlert, storeName, alertType, logicCondtion, outRatio) alertInfo := GetAlertInfo(dayNum, isRedAlert, storeName, alertType, logicCondtion, outRatio)
SendAlertInfo(storeID, storeName, alertInfo) SendAlertInfo(storeID, storeName, alertInfo)
storeAlertDataWrapper.SetData(storeID, model.FieldRiskOrderCount, ratio) fieldName := GetFieldNameByAlertType(alertType, dayNum)
storeAlertDataWrapper.SetData(storeID, fieldName, ratio)
} }
} }
} }
@@ -359,9 +393,22 @@ func ScheduleCheckStoreAlert() {
} }
} }
func GetStoreAlertList(storeIDList []int, cityCode int, keyWord string, beginTime, endTime time.Time, offset, pageSize int) (storeAlertData model.StoreAlertData, err error) { func GetValueColor(alertType, dayNum, ratio, count int) (color string) {
yellowAlert, redAlert, _, _ := CheckAlert(alertType, dayNum, ratio, count)
if yellowAlert {
color = ColorYellow
} else if redAlert {
color = ColorRed
} else {
color = ColorUnknown
}
return color
}
func GetStoreAlertList(storeIDList []int, cityCode int, keyWord string, dateTime time.Time, offset, pageSize int) (storeAlertData model.StoreAlertData, err error) {
db := dao.GetDB() db := dao.GetDB()
storeAlertList, err := dao.GetStoreAlertList(db, storeIDList, cityCode, keyWord, beginTime, endTime) storeAlertList, err := dao.GetStoreAlertList(db, storeIDList, cityCode, keyWord, dateTime)
if err == nil && len(storeAlertList) > 0 { if err == nil && len(storeAlertList) > 0 {
offset = jxutils.FormalizePageOffset(offset) offset = jxutils.FormalizePageOffset(offset)
pageSize = jxutils.FormalizePageSize(pageSize) pageSize = jxutils.FormalizePageSize(pageSize)
@@ -370,8 +417,62 @@ func GetStoreAlertList(storeIDList []int, cityCode int, keyWord string, beginTim
pagedStoreAlertList = append(pagedStoreAlertList, storeAlertList[i]) pagedStoreAlertList = append(pagedStoreAlertList, storeAlertList[i])
} }
var storeAlertAdvancedList []*model.StoreAlertAdvanced
for _, value := range pagedStoreAlertList {
storeAlertAdvanced := &model.StoreAlertAdvanced{}
storeAlertAdvanced.ID = value.ID
storeAlertAdvanced.CreatedTime = value.CreatedTime
storeAlertAdvanced.AlertDate = value.AlertDate
storeAlertAdvanced.StoreID = value.StoreID
storeAlertAdvanced.StoreName = value.StoreName
storeAlertAdvanced.CityName = value.CityName
storeAlertAdvanced.PickTimeDaDa.Value = fmt.Sprintf("%d%%", value.PickTimeDaDa)
storeAlertAdvanced.PickTimeDaDa.Color = GetValueColor(AlertTypePickTimeOrderDaDa, CheckStoreAlertOneDayNum, value.PickTimeDaDa, -1)
storeAlertAdvanced.BadComment.Value = fmt.Sprintf("%d%%", value.BadComment)
storeAlertAdvanced.BadComment.Color = GetValueColor(AlertTypeBadCommentOrder, CheckStoreAlertOneDayNum, value.BadComment, -1)
storeAlertAdvanced.AbsentGoods.Value = fmt.Sprintf("%d%%", value.AbsentGoods)
storeAlertAdvanced.AbsentGoods.Color = GetValueColor(AlertTypeAbsentGoodsOrder, CheckStoreAlertOneDayNum, value.AbsentGoods, -1)
storeAlertAdvanced.PickTimeDaDaOneWeek.Value = fmt.Sprintf("%d%%", value.PickTimeDaDaOneWeek)
storeAlertAdvanced.PickTimeDaDaOneWeek.Color = GetValueColor(AlertTypePickTimeOrderDaDa, CheckStoreAlertOneWeekDayNum, value.PickTimeDaDaOneWeek, -1)
storeAlertAdvanced.BadCommentOneWeek.Value = fmt.Sprintf("%d%%", value.BadCommentOneWeek)
storeAlertAdvanced.BadCommentOneWeek.Color = GetValueColor(AlertTypeBadCommentOrder, CheckStoreAlertOneWeekDayNum, value.BadCommentOneWeek, -1)
storeAlertAdvanced.AbsentGoodsOneWeek.Value = fmt.Sprintf("%d%%", value.AbsentGoodsOneWeek)
storeAlertAdvanced.AbsentGoodsOneWeek.Color = GetValueColor(AlertTypeAbsentGoodsOrder, CheckStoreAlertOneWeekDayNum, value.AbsentGoodsOneWeek, -1)
storeAlertAdvanced.StandardFinishTimeSelfDelivery.Value = fmt.Sprintf("%d%%", value.StandardFinishTimeSelfDelivery)
storeAlertAdvanced.StandardFinishTimeSelfDelivery.Color = GetValueColor(AlertTypeStandardFinishTimeOrderSelfDelivery, CheckStoreAlertOneWeekDayNum, value.StandardFinishTimeSelfDelivery, -1)
storeAlertAdvanced.StandardPickUpTimeDaDa.Value = fmt.Sprintf("%d%%", value.StandardPickUpTimeDaDa)
storeAlertAdvanced.StandardPickUpTimeDaDa.Color = GetValueColor(AlertTypeStandardPickUpTimeOrderDaDa, CheckStoreAlertOneWeekDayNum, value.StandardPickUpTimeDaDa, -1)
storeAlertAdvanced.StandardPickUpTimeDaDa.Value = fmt.Sprintf("%d%%", value.StandardPickUpTimeDaDa)
storeAlertAdvanced.StandardPickUpTimeDaDa.Color = GetValueColor(AlertTypeStandardPickUpTimeOrderDaDa, CheckStoreAlertOneWeekDayNum, value.StandardPickUpTimeDaDa, -1)
if value.NoOrderInMonth == 1 {
storeAlertAdvanced.NoOrderInMonth.Value = "是"
storeAlertAdvanced.NoOrderInMonth.Color = ColorRed
} else {
storeAlertAdvanced.NoOrderInMonth.Value = "否"
storeAlertAdvanced.NoOrderInMonth.Color = ColorUnknown
}
storeAlertAdvanced.RiskOrderCount.Value = utils.Int2Str(value.RiskOrderCount)
if value.RiskOrderCount > 0 {
storeAlertAdvanced.RiskOrderCount.Color = ColorRed
} else {
storeAlertAdvanced.RiskOrderCount.Color = ColorUnknown
}
storeAlertAdvancedList = append(storeAlertAdvancedList, storeAlertAdvanced)
}
storeAlertData.TotalCount = len(storeAlertList) storeAlertData.TotalCount = len(storeAlertList)
storeAlertData.StoreAlertList = pagedStoreAlertList storeAlertData.StoreAlertList = storeAlertAdvancedList
} }
return storeAlertData, err return storeAlertData, err

View File

@@ -36,7 +36,8 @@ type StoreAlert struct {
type StoreAlertEx struct { type StoreAlertEx struct {
StoreAlert StoreAlert
StoreName string `json:"storeName"` StoreName string `orm:"column(store_name)" json:"storeName"`
CityName string `orm:"column(city_name)" json:"cityName"`
} }
type StoreAlertProperty struct { type StoreAlertProperty struct {
@@ -49,6 +50,8 @@ type StoreAlertAdvanced struct {
CreatedTime time.Time `json:"createdTime"` CreatedTime time.Time `json:"createdTime"`
AlertDate time.Time `json:"alertDate"` AlertDate time.Time `json:"alertDate"`
StoreID int `json:"storeID"` StoreID int `json:"storeID"`
StoreName string `json:"storeName"`
CityName string `json:"cityName"`
PickTimeDaDa StoreAlertProperty PickTimeDaDa StoreAlertProperty
BadComment StoreAlertProperty BadComment StoreAlertProperty
@@ -64,7 +67,7 @@ type StoreAlertAdvanced struct {
} }
type StoreAlertData struct { type StoreAlertData struct {
StoreAlertList []*StoreAlertEx `json:"storeAlertList"` StoreAlertList []*StoreAlertAdvanced `json:"storeAlertList"`
TotalCount int `json:"totalCount"` TotalCount int `json:"totalCount"`
} }

View File

@@ -12,17 +12,16 @@ func InsertStoreAlert(storeAlert *model.StoreAlert) error {
return CreateEntity(nil, storeAlert) return CreateEntity(nil, storeAlert)
} }
func GetStoreAlertList(db *DaoDB, storeIDList []int, cityCode int, keyWord string, beginTime, endTime time.Time) (storeAlertList []*model.StoreAlertEx, err error) { func GetStoreAlertList(db *DaoDB, storeIDList []int, cityCode int, keyWord string, dateTime time.Time) (storeAlertList []*model.StoreAlertEx, err error) {
sql := ` sql := `
SELECT t1.* SELECT t1.*, t2.name store_name, t3.name city_name
FROM store_alert t1 FROM store_alert t1
JOIN store t2 ON t1.store_id = t2.id JOIN store t2 ON t1.store_id = t2.id
JOIN place t3 ON t2.city_code = t3.code JOIN place t3 ON t2.city_code = t3.code
WHERE DATE(t1.alert_date) >= DATE(?) AND DATE(t1.alert_date) <= DATE(?) WHERE DATE(t1.alert_date) = DATE(?)
` `
sqlParams := []interface{}{ sqlParams := []interface{}{
beginTime, dateTime,
endTime,
} }
if len(storeIDList) > 0 { if len(storeIDList) > 0 {
sql += ` sql += `

View File

@@ -492,8 +492,7 @@ func (c *StoreController) GetStoreTotalScoreList() {
// @Param storeIDs formData string false "京西门店ID列表" // @Param storeIDs formData string false "京西门店ID列表"
// @Param cityCode formData int false "城市编码" // @Param cityCode formData int false "城市编码"
// @Param keyword formData string false "关键字" // @Param keyword formData string false "关键字"
// @Param beginTime formData string true "开始日期" // @Param dateTime formData string true "统计日期"
// @Param endTime formData string true "结束日期"
// @Param offset formData int false "列表起始序号以0开始缺省为0" // @Param offset formData int false "列表起始序号以0开始缺省为0"
// @Param pageSize formData int false "列表页大小缺省为50-1表示全部" // @Param pageSize formData int false "列表页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult // @Success 200 {object} controllers.CallResult
@@ -501,11 +500,11 @@ func (c *StoreController) GetStoreTotalScoreList() {
// @router /GetStoreAlertList [post] // @router /GetStoreAlertList [post]
func (c *StoreController) GetStoreAlertList() { func (c *StoreController) GetStoreAlertList() {
c.callGetStoreAlertList(func(params *tStoreGetStoreAlertListParams) (retVal interface{}, errCode string, err error) { c.callGetStoreAlertList(func(params *tStoreGetStoreAlertListParams) (retVal interface{}, errCode string, err error) {
timeList, err := jxutils.BatchStr2Time(params.BeginTime, params.EndTime) timeList, err := jxutils.BatchStr2Time(params.DateTime)
if err == nil { if err == nil {
var storeIDList []int var storeIDList []int
if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil { if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil {
retVal, err = misc.GetStoreAlertList(storeIDList, params.CityCode, params.Keyword, timeList[0], timeList[1], params.Offset, params.PageSize) retVal, err = misc.GetStoreAlertList(storeIDList, params.CityCode, params.Keyword, timeList[0], params.Offset, params.PageSize)
} }
} }
return retVal, "", err return retVal, "", err